5.0、Java多线程——初识并发问题
首先简单来举个例子:
假设我们现在有 10 张票,小明、小红、小兰 3 个人在同时在购票机器上买票,当购票完成的时候我们会发现同一张票可能被多个人买到。
当多个线程操作同一个资源的情况下,线程会不安全,并发问题就会引起的数据紊乱。
接下来我们用代码来演示一下这个问题:
TestThread3.java 代码如下:
package com.hkl.demo01;
public class TestThread3 implements Runnable {
private int tickets = 10;
public void run() {
while (true) {
if(tickets <= 0) {
break;
}
System.out.println(Thread.currentThread().getName()+"-->获取了第"+tickets--+"张票");
try {
Thread.sleep(200);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
public static void main(String[] args) {
TestThread3 tt3 = new TestThread3();
new Thread(tt3,"小明").start();
new Thread(tt3,"小红").start();
new Thread(tt3,"小兰").start();
}
}
这里我用到了线程休眠,因为十张票太少了,不用休眠的话CPU一瞬间就会把票分配完给同一个人看不出效果。
后台输出结果如下:
可以看到 小红 和 小明 都获得了第七张票出现了数据紊乱,