hooyantsing's Blog

6_初识并发问题

字数统计: 244阅读时长: 1 min
2020/08/20

6 初识并发问题

狂神说Java 多线程详解

继承 Thread 类

  • 子类继承 Thread 类具备多线程能力

  • 启动线程:子类对象 .start()

  • 不建议使用:避免OOP单继承局限性
    实现 Runnable 接口

  • 实现接口 Runnable 具有多线程能力

  • 启动线程:传入目标对象 + Thread对象 .start()

  • 推荐使用:避免单继承的局限性,灵活方便,方便同一个对象被多个线程使用。
    例子:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
public class TestThread4 implements Runnable {
// 公共资源
private int ticketNums = 10;

@Override
public void run() {
while (true){
if(ticketNums <= 0){
break;
}
try {
Thread.sleep(200);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(Thread.currentThread().getName() + " 拿到了第 " + ticketNums-- + " 票");
}
}

public static void main(String[] args) {
TestThread4 ticket = new TestThread4();

new Thread(ticket,"小明").start();
new Thread(ticket,"老师").start();
new Thread(ticket,"黄牛党").start();
}
}

运行结果:

可以看到,有人将票取重了,这是并发经常遇到的问题。****9f01ddb2013d145ea6a012c493bd444a.png

CATALOG
  1. 1. 6 初识并发问题