回顾
在上一篇 Java基础之线程那些事 我们介绍了关于线程和进程的相关概念,还留下了个题目:即三个窗口同时卖100张票的问题,那么今天就来说说多线程编程的实现。
构建多线程主要有继承和实现两种方法
多线程创建
1.继承Thread类
继承的方法即构建一个类继承于Thread类,并实现run方法,具体如下
1 | 复制代码class SubThread extends Thread{ |
- start方法启动线程并执行对应的run方法
- 需要将需要实现的业务代码放在run方法内
2.实现Runnable接口
实现java.lang.Runnable接口
1 | 复制代码class SubThread implements Runnable{//创建一个实现Runnable接口的类 |
几个重要的步骤
- 1 构建一个类实现Runnable接口
- 2 重写run方法 run里写你的业务代码
- 3 构建这个类实例并当参数传递到Thread类构造方法中得到线程实例
- 4 线程实例调用start方法
3.Thred类的一些基础方法
1 | 复制代码Thread.currentThread() //获取当前线程 |
4.对比继承与实现
都与Runnable接口相关
业务目标代码放在run方法里
鉴于java单继的特性 实现接口都方式更具有通用性
如果多个线程操作同一份资源 更适合使用实现都方式
卖票程序
在上一篇中我们留个问题:就是三个窗口卖票,票一共有100张,我们来实现它
1.继承的方法
1 | 复制代码class Window extends Thread{//继承 |
由于是一共卖100张票,故需要设ticket 为static ,三个线程共享这个数据
2.实现的方法
1 | 复制代码class Window implements Runnable{//实现接口 |
注:由于这里只有一个Window实例 所有只有一份ticket=100,不需要static修饰
多线程程序的优缺点
在单核的时代,多线程会带来线程切换的损耗,但是即使是这样多线程对图形化界面更有意义,它可增强用户体验。(例如你在单核机器上边写代码 边听歌) 实际上多个线程在cpu上来回切换,给你一种并行的假象。
在多核心时代,例如当前的8代i7处理器,已经是6核12线程了,可以保持多个线程并行运算,极大的提高性能,用多线程编程
反而能提高计算机cpu的利用率
另外多线程编程能改善程序结构,可将长又复杂的进程分割成多个线程,独立运行,利于理解和修改
总结
今天主要讲解如何实现多线程,以及线程实例上有哪些方法,需要重点掌握实现的方式,因为实现的方式避开了java单继承的缺点。
但是本文的样例代码并不是线程安全的,关于线程安全问题,我们下一篇讲解。
喜欢本文的朋友们,欢迎长按下图关注订阅号”我的编程笔记”,收看更多精彩内容~~
本文转载自: 掘金