标签:知识点 ring 就是 并发编程 使用 产生 为什么 理解 runnable
上篇文章讲述了创建线程的常用方式
?Thread类实现了Runable接口。
?都需要重写里面Run方法。
?Thread方式不支持多继承,Runnable方式支持多个实现
?Runnable更容易实现资源共享,能多个线程同时处理一个资源。
本人在理解他们区别的时候
考虑到Thread类本身就是Runnable的实现类
所以产生了一个疑惑:-
为什么Runnable可以实现共享而Thread却不行呢
疑惑代码:
class Thread1 extends Thread {
int i = 100;
@Override
public synchronized void run() {
while (i > 0) {
System.out.println(Thread.currentThread().getName() + "i:" + i);
i--;
}
}
}
public class TestThread {
public static void main(String[] args) {
Thread1 te1 = new Thread1();
Thread t1 = new Thread(te1, "window1");
Thread t2 = new Thread(te1, "window2");
t1.start();
t2.start();
}
}
下面我们就来聊一聊(有共同疑惑的朋友们可以参考一下):
首先我们要清楚Thread和Runnable两种方式的本质区别在哪里
我们知道无论使用哪种方式最终都会通过 Thread类对象调用start方法进行开启线程
Thread方式是调用无参构造方法
Runnable方式是调用带有Runnable参数的有参构造方法
我们说过Thread类实现了Runable接口
以上疑惑代码中就是向Thread构造方法中传递了一个Tel1参数
看似与Runnable没有关系
但实质上是属于常说的Runnable方式调用
对应源码:Thread(Runnable target, String name)
this.target = paramRunnable;
public void run()
{
if (this.target != null)
this.target.run();
}
如果是参数中Runnable不为空
那么Thread run方法中最终执行的方法实际上是传进来Runnable中的run方法
所以使用Runnable方式 无论new出多少个Thread对象
最终执行的任务都是一样的
自然就实现了资源的共享
每次new出Thread对象
他们对应的成员变量是互不影响的
所以就不能达到资源共享的效果
?在学习过程中理解一些概念或者结论不清晰的时候,一定要亲自动手结合着代码去分析,不要片面的理解一些知识点,一定要搞清实质。
?本文内容如有不妥,恳请指正。
并发编程之多线程基础-Thread和Runnable的区别及联系(二)
标签:知识点 ring 就是 并发编程 使用 产生 为什么 理解 runnable
原文地址:https://www.cnblogs.com/LoveShare/p/9782373.html