线程使用场景:
1. 同时处理对个不同的任务—>并行
- 需求:一个线程处理一个任务
- 比如视频会议系统:音频传输任务、视频传输任务、桌面共享任务
2. 同时处理多个相同任务—>并发
- 需求:一个线程处理多个任务
- e.g 点击一次产生500个小球
- 一个线程执行所有小球的 绘制 移动等
- 当球的数量变多—>轮询执行耗时长
- 解决办法:一个线程只处理一部分小球,多线程实现多个小球——>更流畅,卡顿减少
3.1 流水线模式处理单个任务
比如一个产品(任务)需要3道工序(线程)完成;
工序(线程)之间有严格的相对顺序,且只处理工序对应的内容;
- 多个线程不做限制的话,线程启动的顺序随机(cpu随机决定),不满足流水线1-2-3的要求,下面给出了不做线程限制的代码:
package com.fyc0727;
public class Task {
int num=1;
public void taskA() {
num= num*200;
}
public void taskB() {
num= num/2;
}
public void taskC() {
num= num+600;
}
}
class T1 extends Thread {
Task t;
T1(Task t){
this.t=t;
}
public void run() {
System.out.println("T1启动");
t.taskA();
System.out.println("T1结束"+t.num);
}
}
class T2 extends Thread {
Task t;
T2(Task t){
this.t=t;
}
public void run() {
System.out.println("T2启动");
t.taskB();
System.out.println("T2结束"+t.num);
}
}
class T3 extends Thread {
Task t;
T3(Task t){
this.t=t;
}
public void run() {
System.out.println("T3启动");
t.taskC();
System.out.println("T3结束"+t.num);
}
}
class Test