【Java多线程与并发库】01 传统线程技术
来源:互联网 发布:topsurv软件 编辑:程序博客网 时间:2024/06/10 10:02
【Java多线程与并发库】01 传统线程技术
创建线程的两种传统方式
Java可以通过继承Thread类,覆写run方法自定义线程类,或者实现Runnable接口,覆写run方法,并将其传递给Thread的构造方法创建线程对象。
继承Thread类创建线程类
继承Thread类,覆写run方法。
run方法被称为线程执行体。
可以调用线程对象的start方法启动线程。
需要注意的是run方法并不是抽象方法,Thread也不是抽象类。
Thread中run方法如下:
public void run() { if (target != null) { target.run(); }}
继承Thread类创建线程类的代码示例
public static void main(String... args){ Thread thread1 = new Thread(){ int counter = 0; @Override public void run(){ // 覆写run方法,线程执行体 String threadName = Thread.currentThread().getName(); while(true) { System.out.println(threadName + "-" + counter); counter++; if (counter >= 1000) break; } } }; thread1.start(); //启动线程}
实现Runnable接口创建线程类
实现Runnable接口,覆写run方法,将实例传递给Thread的构造方法。
public static void main(String... args){ Thread thread2 = new Thread(new Runnable() { //宿主 int counter = 0; @Override public void run() { while (true){ System.out.println(Thread.currentThread().getName()); if (counter ++ >= 10) break; } } }); thread2.start();}
Thread 和 Runnable 对比:
采用实现Runnable接口的方式创建多线程的优缺点
优点:
- 线程类只是实现了Runnable接口,还可以继承其他类
- 多个线程可以共享同一个target对象,所以非常适合多个相同线程来处理同一份资源的情况,从而可以将CPU、代码和数据分开,形成清晰的模型,姣好的体现面向对象的思想。
缺点:
- 编程稍微复杂,如果需要访问当前线程,则必须使用Thread.currentThread()方法,而Thread方式可以使用this访问当前线程。
采用继承Thread的方式创建多线程的优缺点
优点:
- 编程简单,如果需要访问当前线程,Thread方式可以使用this访问当前线程,而实现Runnable方法则必须使用Thread.currentThread()方法。
缺点:
- 因为线程已经继承了Thread类,所以不能再继承其他父类。
小结:
Runnable更能体现面向接口编程。建议实现Runnable接口,而不是继承Thread覆写run方法
一个问题
多线程机制会提高程序的运行效率吗?为什么会有多线程下载呢?
不一定。因为线程的创建和上下文切换也是有开销的。
多线程下载,可以抢占服务器端的带宽资源。
参考
《Java并发编程的艺术》
《Java疯狂讲义》
阅读全文
1 0
- 【Java多线程与并发库】01 传统线程技术
- 【Java多线程与并发库】1.传统线程技术回顾
- 【Java多线程与并发库】1.传统线程技术回顾
- 【Java多线程与并发库】3.传统线程互斥技术
- 【Java多线程与并发库】4.传统线程同步通信技术
- 【Java多线程与并发库】3.传统线程互斥技术
- 【Java多线程与并发库】4.传统线程同步通信技术
- 【Java多线程与并发库】03 传统线程互斥技术 synchronized
- 【Java多线程与并发库】04 传统的线程同步通信技术-synchronized/wait/notify/notifyAll
- 【Java多线程与并发库】2.传统定时器技术回顾
- 【Java多线程与并发库】2.传统定时器技术回顾
- 【Java多线程与并发库】02 传统定时器技术
- Java多线程与并发应用-(3)-传统线程通信技术及生产者消费者模式
- Java多线程与并发应用-(4)-传统线程通信技术试题
- 【java多线程与并发库】---传统java多线程<1>线程基本概念
- 【java多线程与并发库】---传统java多线程<2> 线程创建方式
- 【java多线程与并发库】---传统java多线程<3> .线程分类
- 【java多线程与并发库】---传统java多线程<4> .线程状态及优先级
- 【JavaSE练习】项目_项目_模拟用户登陆注册功能(IO完成)
- 在服务器端配置jypyter环境
- 学生信息管理系统
- 重建二叉树
- 《Python爬虫开发与项目实战》读书笔记
- 【Java多线程与并发库】01 传统线程技术
- 【支付系统学习笔记】-二支付系统设计(支付网关设计)
- HTTP协议详解(很经典)
- 字典树
- HDU 2041 超级楼梯
- 获得地址
- jvm类加载器双亲委派模式
- 增
- #bzoj3391#小球游戏(数论 + 网格路径模型)