java多线程的创建方式
来源:互联网 发布:画画软件安卓 编辑:程序博客网 时间:2024/06/05 16:05
根据Thread类中的run方法
public void run() {
if (this.target == null)
return;
this.target.run();
}
可以知道运行多线程代码有两种方式,一种是运行Thread类run方法中的代码,一种是运行target中的run代码。
方法一:运行Thread类run方法中的代码
Thread thread1=new Thread(){
@Override
public void run() {
while(true){
try {
Thread.sleep(500);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(Thread.currentThread().getName());
}
}
};
thread1.start();
方法二:运行target中的run代码
target是何物,我们来追踪一下:
private Runnable target;
他是Thread类的一个Runnable参数,那么他是如何传参进来的呢?
public Thread(Runnable paramRunnable) {
init(null, paramRunnable, "Thread-" + nextThreadNum(), 0L);
}
通过Thread类构造方法传Runnable进来,再调用init方法
private void init(ThreadGroup paramThreadGroup, Runnable paramRunnable,
String paramString, long paramLong) {
init(paramThreadGroup, paramRunnable, paramString, paramLong, null);
}
这是Thread类的一个私有初始化方法
再调用方法
private void init(ThreadGroup paramThreadGroup, Runnable paramRunnable,
String paramString, long paramLong,
AccessControlContext paramAccessControlContext) {
}
在这个方法里有步骤
this.target = paramRunnable;
从而给target赋值。
改方法创建改多线程方式:
Thread thread2=new Thread(new Runnable(){
@Override
public void run() {
while(true){
try {
Thread.sleep(500);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(Thread.currentThread().getName());
}
}
});
thread2.start();
那么问题又来了,如果同时存在方法一和方法二的情况,如下代码:
Thread thread3=new Thread(new Runnable(){
@Override
public void run() {
while(true){
try {
Thread.sleep(500);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("run:"+Thread.currentThread().getName());
}
}
}){
public void run() {
while(true){
try {
Thread.sleep(500);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("thread:"+Thread.currentThread().getName());
}
}
};
thread3.start();
那么该执行哪个代码呢?根据java编程思想,我们知道方法一是覆写了父类的run方法,方法二是父类固有的,所以代码在执行的时候是选择执行子类的run方法,如果子类run方法不存在,才去父类寻找runnable的run方法
- java多线程的创建方式
- Java多线程创建的方式
- java多线程的创建方式
- Java多线程创建方式
- java另一种创建多线程的方式
- Java创建多线程的两种方式
- Java中创建多线程的方式
- java多线程---线程的创建方式
- java创建多线程实现的方式
- java 多线程的三种创建方式
- Java创建多线程的三种方式
- Java多线程创建的几种方式
- Java 创建多线程的第二种方式
- Java--多线程的创建(三种方式)
- 【java多线程】多线程的创建三种方式--笔记
- 多线程的创建方式
- 多线程的创建方式
- 多线程的创建方式
- hdu2602Bone Collector(01背包)
- 聊聊同步、异步、阻塞与非阻塞
- PHP高效率写法
- java的static final 和final static区别
- 31. Next Permutation
- java多线程的创建方式
- android studio 首字母提示 设置 大小写敏感
- C#中static关键字的作用
- Eclipse工作视图的背景色更改
- MyBatis 入门(二)--用接口方式访问数据库
- 24段百变魔尺两款经典玩法(2016版)
- mAppWidget - 5. 手绘(自定义)地图物品添加警示圈(魔兽英雄光环)
- logistic回归用作分类的讲义
- combo enable { copper | fiber }