什么是线程安全问题?
答:当多个线程共享同一个全局变量。在做写操作的时候,可能会受到其他线程的干扰,导致数据有问题,这种现象叫做线程安全问题。(多个线程共享同一个局部变量,在做写操作的时候,不会发生线程安全问题)
class TrianThread1 implements Runnable {
//总共有一百张火车票
private int i =100;
@Override
public void run() {
//模拟抢票
while (i > 0 ){
try {
Thread.sleep(50);
} catch (Exception e) {
// TODO: handle exception
}
sale();
}
}
public void sale(){
if(i>0){
System.out.println(Thread.currentThread().getName()+"出售第"+(100-i+1)+"张票");
i--;
}
}
}
public class ThreadDemo {
public static void main(String[] args) {
TrianThread1 trianThread1 = new TrianThread1();
Thread t1 = new Thread(trianThread1,"窗口1");
Thread t2 = new Thread(trianThread1,"窗口2");
t1.start();
t2.start();
}
}
线程安全问题解决办法:
线程之间如何实现同步()保证数据原子性
synchronized -- 自动锁
Lock -- jdk1.5并发包里的 -- 手动锁