java多线程四种实现模板
假设一个项目拥有三块独立代码块,需要执行,什么时候用多线程?
这些代码块某些时候需要同时运行,彼此独立,那么需要用到多线程操作更快。。。
这里把模板放在这里,需要用的时候寻找合适的来选用。
总体分为两种:
一、使用匿名内部类的方式(推荐)
1)方式1开启多线程(Thread)
//使用第一种方式,开启线程
new Thread()
{
public void run()
{
for(int i=0;i<100;i++)
{
System.out.println(Thread.currentThread().getName()+"线程方式1"+ i);
} }
}.start();
2)方式2内部开启线程(Runnable)
//使用第二种方式,开启线程
Runnable r =new Runnable()
{
public void run()
{
for(int i=0;i<100;i++)
{
System.out.println(Thread.currentThread().getName()+".....方式2++"+ i);
}
}
}; //不可或缺
new Thread(r).start();
二、通过在外部定义类,类的实例化开启线程
3)使用第三种方式,类实例化开启线程(继承方式)
类定义:
class ThreadTest extends Thread
{
public void run()
{
for(int i=0;i<100;i++)
{
System.out.println(Thread.currentThread().getName()+".....类的方式(extends)----"+ i);
}
} }
主函数中调用:
//使用第三种方式,类实例化开启线程(继承方式)
new ThreadTest().start();
4)使用第四种方式,类实例化开启线程(实现方式)
类定义:
class RunnableTest implements Runnable
{
public void run()
{
for(int i=0;i<100;i++)
{
System.out.println(Thread.currentThread().getName()+".........类的方式(implements)----++"+ i);
}
}
}
主函数调用:
//使用第四种方式,类实例化开启线程(实现方式)
new Thread(new RunnableTest()).start();
附测试代码:
class ThreadUseDemo
{
public static void main(String[] args)
{
//System.out.println("Hello World!");
//使用第一种方式,开启线程
new Thread()
{
public void run()
{
for(int i=0;i<100;i++)
{
System.out.println(Thread.currentThread().getName()+"线程方式1"+ i);
} }
}.start();
//主线程在这里运行
for(int i=0;i<100;i++)
{
System.out.println(Thread.currentThread().getName()+"前台线程"+ i);
} //使用第二种方式,开启线程
Runnable r =new Runnable()
{
public void run()
{
for(int i=0;i<100;i++)
{
System.out.println(Thread.currentThread().getName()+".....方式2++"+ i);
}
}
}; //不可或缺
new Thread(r).start(); //使用第三种方式,类实例化开启线程(继承方式)
new ThreadTest().start();
//使用第四种方式,类实例化开启线程(实现方式)
new Thread(new RunnableTest()).start();
}
} class ThreadTest extends Thread
{
public void run()
{
for(int i=0;i<100;i++)
{
System.out.println(Thread.currentThread().getName()+".....类的方式(extends)----"+ i);
}
} }
class RunnableTest implements Runnable
{
public void run()
{
for(int i=0;i<100;i++)
{
System.out.println(Thread.currentThread().getName()+".........类的方式(implements)----++"+ i);
}
}
}
ThreadUseDemo .java
线程学习告一段落了,之后关于线程其他的知识点,这里记下笔记,用的时候再说:
1)线程停止:
通过在主函数中控制标志位来中止子线程的循环状态,特殊情况:
当现场处于冻结状态(wait)时,就读取不到flag标记,那么线程就不会结束。解决办法:
Interrupt:清楚冻结状态,当然此时会抛异常,在异常中更改标志位即可
wait ---
sleep ----===》一砖头下去---》清醒(运行态)抛异常->有人强制结束,可以获取运行资格,操作标记为false,循环判断为假,线程结束
2) 守护线程
eg: t1.setDaemon(true);//此时t1线程为守护线程,开启后和前台线程共同运行,互抢CPU资格,但当主线程(前台)结束后,守护线程也自动停止(依赖于前台主线程)
3) join()
eg: t1.start();t1.join();//t1在start后,join表示向CPU申请执行权(CPU交出,处于wait状态),t1和其他正在运行的线程一起争夺,直到t1结束后交还资格给CPU
4) 线程组:谁开启的线程,就属于某个组(几乎用不到)
5)线程优先级:1--10,默认为5,经常用得到有:MIN_PRIORITY (1);MAX_PRIORITY (10); NORM_PRIORITY (5 )
定义:
这是java线程的优先级:
java.lang.Thread
public static final int MAX_PRIORITY 10
public static final int MIN_PRIORITY 1
public static final int NORM_PRIORITY 5
使用:
//第一种方案
class MyThead implements Runnable
{
public void run()
{
for (int i = 1; i <= 10; i++)
{
System.out.println(Thread.activeCount() + "thread======>AAA");
}
}
}
//第二种方案
class MyThreadRunnable extends Thread
{ public void run()
{
for (int i = 1; i <= 10; i++)
{
System.out.println(Thread.activeCount() + "thread======BBB");
}
} } public class TheadMain
{
public static void main(String[] args)
{
MyThead myThead = new MyThead();
Thread thread = new Thread(myThead);
MyThreadRunnable thread2 = new MyThreadRunnable();
thread.start();
thread.setPriority(Thread.MIN_PRIORITY);
thread2.start();
thread2.setPriority(Thread.MAX_PRIORITY);
}
}
java多线程四种实现模板的更多相关文章
- Java基础:Java的四种引用
在Java基础:java虚拟机(JVM)中,我们提到了Java的四种引用.包括:强引用,软引用,弱引用,虚引用.这篇博客将详细的讲解一下这四种引用. 1. 强引用 2. 软引用 3. 弱引用 4. 虚 ...
- Java的四种内部类
Java的四种内部类包括如下: 成员内部类 静态内部类 局部内部类 匿名内部类 成员内部类: 定义在另一个类(外部类)的内部,而且与成员方法和属性平级叫成员内部类,......相当于外部类的非静态方法 ...
- Java中四种引用:强、软、弱、虚引用
这篇文章非常棒:http://alinazh.blog.51cto.com/5459270/1276173 Java中四种引用:强.软.弱.虚引用 1.1.强引用当我们使用new 这个关键字创建对象时 ...
- java中四种引用类型
java中四种引用类型 今天看代码,里面有一个类java.lang.ref.SoftReference把小弟弄神了,试想一下,接触java已经有3年了哇,连lang包下面的类都不了解,怎么混.后来在 ...
- java 多线程四
java 多线程一 java 多线程二 java 多线程三 java 多线程四 一个生产者,消费者的例子: import java.util.Stack; /** * Created by root ...
- Java的四种内部类(含代码实例)
写在前面:本博客为本人原创,严禁任何形式的转载!本博客只允许放在博客园(.cnblogs.com),如果您在其他网站看到这篇博文,请通过下面这个唯一的合法链接转到原文! 本博客全网唯一合法URL:ht ...
- Java的四种引用类型之弱引用
先说结论: 首先,Java中有四种引用类型:强引用.软引用.弱引用.虚引用.-- 在 Java 1.2 中添加的,见 package java.lang.ref; . 其次,这几个概念是与垃圾回收有关 ...
- java中四种引用类型(对象的强、软、弱和虚引用)
对象的强.软.弱和虚引用在JDK 1.2以前的版本中,若一个对象不被任何变量引用,那么程序就无法再使用这个对象.也就是说,只有对象处于可触及(reachable)状态,程序才能使用它.从JDK 1.2 ...
- java 基础 四种权限修饰符
/** * Java有四种权限修饰符: * public > protected > (default) > private * 同一个类 YES YES YES YES * 同一个 ...
随机推荐
- ucos队列的实现--源码分析
之前说到事件,讲了事件,信号量和互斥信号量,还有一个队列没说,今天说说队列. 队列是用在任务之间传送多个消息的时候,a任务发送消息,b任务发送消息,然后c任务可以依次去提取出b和a传递的消息,不会造成 ...
- 功率W与dBm的对照表及关系(转)
源:功率W与dBm的对照表及关系 功率W与dBm的对照表 dBm Watts dBm Watts 0 ...
- 直流电机驱动PWM频率(转)
源:直流电机驱动PWM频率 1.没有统一的标准,其实PWM的频率和你的电机感抗和你需要的速度响应时间有很大的关系.一般的电机用14K就足够了.当然自需要简单的调速可以随便选. 如果电机转速比较高,感抗 ...
- 微信小程序之----audio音频播放
audio audio为音频组件,我们可以轻松的在小程序中播放音频. audio组件属性如下: 属性名 类型 默认值 说明 id String video 组件的唯一标识符, src String ...
- js设置文本框只能输入数字
JS判断只能是数字和小数点 1.文本框只能输入数字代码(小数点也不能输入) <input onkeyup="this.value=this.value.replace(/\D/g,'' ...
- bzoj2628: JZPSTR
Description 问题描述 你要对一个字符串进行三种操作: 0. 在位置x_i处插入一个字符串y_i 1. 删除位置[x_i, y_i)的字符串 2. 查询位置[x_i, y_i)的字符串包含多 ...
- PHPEXCEL实例-导出EXCEL
PHPExcel 是相当强大的 MS Office Excel 文档生成类库,当需要输出比较复杂格式数据的时候,PHPExcel 是个不错的选择. <?php /* * 导出EXCEL * ...
- 谈谈线程同步Lock和unLock
Lock可以使用Condition进行线程之间的调度,它有更好的灵活性,而且在一个对象里面可以有多个Condition(即对象监视器),则线程可以注册在不同的Condition,从而可以 有选择性的调 ...
- SQL数据库文件修复/用友/金蝶/管家婆/速达/思讯数据库恢复 硬盘恢复
硬盘的故障情况可以分为以下几类: 1.控制电路故障 大部分外电路的问题是电源芯片或主轴驱动芯片烧坏引起的,由于硬盘电路板质量问题.设计缺陷.市电波动.突然断电.芯片老化或者散热不良.静电等原因造成芯片 ...
- SVN和Git的一些用法总结
(A)SVN (1)查看日志提交的时候一般会写上注释,如果要查看提交日志,用以下命令: 1 svn log -l 4 其中,-l 4表示只查看最近4条日志(也可以没有这样的参数,就表示查看所有日志). ...