Java中 Thread和Runnable实现多线程的区别和联系
来源:互联网 发布:mac的safari关不掉了 编辑:程序博客网 时间:2024/05/06 04:56
Java有两种方式实现多线程,第一个是继承Thread类,第二个是实现Runnable接口。他们之间的联系:
1、Thread类实现了Runable接口。
2、都需要重写里面Run方法。
他们之间的区别“
1、实现Runnable的类更具有健壮性,避免了单继承的局限。
2、Runnable更容易实现资源共享,能多个线程同时处理一个资源。
看一下以继承Thread的卖票例子:
public static void main(String[] args) {// TODO Auto-generated method stubnew MyThread().start();new MyThread().start();}class MyThread extends Thread{ private int ticket = 5; public void run(){ while(true){ System.out.println("Thread ticket = " + ticket--); if(ticket < 0){ break; } } } }
输出结果:
Thread ticket = 5Thread ticket = 5Thread ticket = 4Thread ticket = 4Thread ticket = 3Thread ticket = 2Thread ticket = 3Thread ticket = 1Thread ticket = 2Thread ticket = 0Thread ticket = 1Thread ticket = 0
从以上输出结果可以看出,我们创造了2个多线程对象,他们分别实现了买票任务,也就是一共卖了12张票。
实现Runnable接口的卖票例子:
<pre name="code" class="html">public static void main(String[] args) {// TODO Auto-generated method stubMyThread2 m=new MyThread2();new Thread(m).start();new Thread(m).start();}class MyThread2 implements Runnable{ private int ticket = 5; public void run(){ while(true){ System.out.println("Runnable ticket = " + ticket--); if(ticket < 0){ break; } } } }输出结果:
Runnable ticket = 5Runnable ticket = 4Runnable ticket = 3Runnable ticket = 2Runnable ticket = 1Runnable ticket = 0
从结果我们可以看到,虽然我们声明了两个线程,但是一共卖了6张票。他们实现了资源共享。PS:在实际开发中,一定要注意命名规范,其次上面实现Runable接口的例子由于同时操作一个资源,会出现线程不安全的情况,如果情况需要,我们需要进行同步操作。
1 0
- Java中 Thread和Runnable实现多线程的区别和联系
- java中thread和runnable的区别和联系
- Java中两种多线程实现方法:Thread类和Runnable接口的联系与区别
- Java中Runnable 和 Thread的区别及联系
- Java 继承Thread和实现Runnable实现多线程的区别
- Thread和Runnable实现多线程的区别
- Thread和Runnable实现多线程的区别
- Thread和Runnable实现多线程的区别
- Thread和Runnable实现多线程的区别
- 多线程中基础Thread和实现Runnable的区别
- 【Java并发编程】Runnable和Thread实现多线程的区别
- 多线程中Thread和Runnable的区别
- java 多线程 Thread和Runnable的区别
- Java多线程Thread和Runnable的区别
- java中多线程Runnable接口和Thread类的区别
- Java多线程中Runnable和Thread的区别
- JAVA多线程Thread和Runnable的实现
- Java 中多线程的实现方法之Thread和Runnable
- 查询A、B表中,A表中B表没有的数据
- 初学Redis(3)——用Redis作为Mysql数据库的缓存
- spark 使用
- CocoaPods更新到1.0.1遇到的坑
- 【中间件】(二):学习中间件不得不了解的基础知识
- Java中 Thread和Runnable实现多线程的区别和联系
- OGL现代图形(顶点/纹理/状态命令/Shader)和底层渲染顺序(CommandBuffer协同并行/帧前后/drawcall过程)-持续更新
- 初学Redis(4)——简单实现Redis缓存中的排序功能
- [iOS导航] UINavgationBar导航栏隐藏
- 将MySQL数据迁移到Redis
- R 3.3.0 is another motivation for Docker
- 从Mysql将数据快速导入到redis中
- 深入理解HTTP Session
- Android studio 出现 Unsupported major.minor version 52.0