java 线程数据同步
由买票实例
//java线程实例 //线程数据同步 //卖票问题 //避免重复卖票 //线程 class xc1 implements Runnable{ //定义为静态,可以使多个对象使用同一个数据 public static int chepiao = 10; //车票总数 public static String aa = new String("123"); //字符串随意定义,定义在函数上面 public void run(){ while(true){ //synchronized的作用是,让它所管辖的代码部分,要么全部执行完,要么全部不执行 //synchronized既可以修饰代码块,又可以修饰方法 //synchronized如果直接放在方法上使用。使用方法为 public synchronized 方法名 //这里为什么要加(aa),原因在于,如果能得到aa,就执行 synchronized(aa){ if(chepiao>0){ chepiao--; System.out.println(Thread.currentThread().getName()+"车站,已经卖出第 "+(chepiao+1)+" 张车票"); } else{ break; } } } } } public class Index{ public static void main(String[] args){ //线程1 xc1 xc1 = new xc1(); Thread xc1_Thread = new Thread(xc1); xc1_Thread.start(); //执行线程 //线程2 xc1 xc2 = new xc1(); Thread xc2_Thread = new Thread(xc2); xc2_Thread.start(); //执行线程 //线程3 xc1 xc3 = new xc1(); Thread xc3_Thread = new Thread(xc3); xc3_Thread.start(); //执行线程 } }