什么是线程安全问题?
答:当多个线程共享同一个全局变量。在做写操作的时候,可能会受到其他线程的干扰,导致数据有问题,这种现象叫做线程安全问题。(多个线程共享同一个局部变量,在做写操作的时候,不会发生线程安全问题)
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并发包里的 -- 手动锁