Thread与Runnable
来源:互联网 发布:超牛数据恢复免费软件 编辑:程序博客网 时间:2024/05/17 08:24
这里我想说的是继承Thread类也可以实现数据共享
首先实现多线程有两种方法:
1、继承Threa类
2、实现Runnable接口
下面是书上与网上的都有的例子:
//继承Thread类class ThreadClass extends Thread{private int count = 10;@Overridepublic void run(){while(count>0){System.out.println(Thread.currentThread().getName()+" "+count-- );}}}
public class Test{public static void main(String[] args){ThreadClass thread1 = new ThreadClass();ThreadClass thread2 = new ThreadClass();ThreadClass thread3 = new ThreadClass();thread1.start();thread2.start();thread3.start();}}
运行结果(每次结果不一样):
Thread-2 10
Thread-0 10
Thread-0 9
Thread-0 8
Thread-1 10
Thread-1 9
Thread-1 8
Thread-1 7
Thread-1 6
Thread-1 5
Thread-1 4
Thread-1 3
Thread-1 2
Thread-1 1
Thread-0 7
Thread-2 9
Thread-0 6
Thread-2 8
Thread-0 5
Thread-2 7
Thread-0 4
Thread-2 6
Thread-0 3
Thread-2 5
Thread-0 2
Thread-2 4
Thread-0 1
Thread-2 3
Thread-2 2
Thread-2 1
结果显示继承Thread类,没有实现数据共享。
下面是实现Runnable接口:
class RunnableClass implements Runnable{//private int count = 10;public void run(){while(count>0){System.out.println(Thread.currentThread().getName()+" "+count--);}}}
如果像下面这样写,是错的:
public class Test{public static void main(String[] args){RunableClass thread1 = new RunableClass();RunableClass thread2 = new RunableClass();RunableClass thread3 = new RunableClass();thread1.start();//错误 Runable 接口中没有start方法thread2.start();//错误 Runable 接口中没有start方法thread3.start();//错误 Runable 接口中没有start方法}}
我们看源码或者API可以发现Thread有个构造方法:
public Thread(Runnable target) { init(null, target, "Thread-" + nextThreadNum(), 0); }是接收一个Runnable的。
所能如果改成下面这样:
public class Test{public static void main(String[] args){RunableClass thread = new RunableClass();new Thread(thread).start();new Thread(thread).start();new Thread(thread).start();}}运行结果(随机):
Thread-2 10
Thread-1 10
Thread-3 9
Thread-1 7
Thread-2 8
Thread-1 5
Thread-3 6
Thread-1 3
Thread-2 4
Thread-1 1
Thread-3 2
我们可以看到 启动三个线程 后共享一个数据。
但是我们看源码或API后知道 Thread类电继承了Runnable接口的,那如果像下面这样改写继承Thread的线程:
public class Test{public static void main(String[] args){/*ThreadClass thread1 = new ThreadClass();ThreadClass thread2 = new ThreadClass();ThreadClass thread3 = new ThreadClass();thread1.start();thread2.start();thread3.start();*/ThreadClass thread = new ThreadClass();new Thread(thread).start();new Thread(thread).start();new Thread(thread).start();}}运行结果:
Thread-1 10
Thread-1 8
Thread-3 9
Thread-3 7
Thread-3 6
Thread-1 5
Thread-1 2
Thread-1 1
Thread-2 3
Thread-3 4
发现也可以实现数据共享。不像书上网上说的不能实现数据共享。我的理解有些肤浅,还希望有高价指点迷津。
- Thread与Runnable
- 线程:thread与runnable
- Thread 与Runnable区别
- Thread与Runnable区别
- Thread 与Runnable区别
- Thread与Runnable区别
- Thread 与 Runnable 区别
- runnable与thread区别
- Thread与Runnable
- runnable与Thread
- Thread与Runnable 区别
- thread与runnable区别
- Thread与Runnable比较
- Thread类与Runnable接口
- Thread类与Runnable接口
- Runnable与Thread的区别
- Thread 与Runnable区别详解
- Thread与Runnable的区别
- mysql数据库目录存放位置更改
- Oracle基础(五)pl/sql进阶(分页过程)
- Qt开发中遇到的问题与解决方法
- MFC PtInRegion
- salesforce---设置页面logo
- Thread与Runnable
- [华为机试练习题]34.识别有效的IP地址和掩码并进行分类统计
- Maven插件实现 打包项目,部署到tomcat端
- 《Java Web高级编程——涵盖WebSockets、Spring Framework、JPA Hibernate和Spring Security》
- copy first ,then create your own life!
- 断舍离
- SQL简单函数语句整理
- 协议传值
- 动态规划:从新手到专家