线程同步(synchronized)

来源:互联网 发布:wlk数据库 编辑:程序博客网 时间:2024/06/05 17:21

假设有两个窗口合起来要卖100张票,这就涉及到数据共享的问题,故这里用到了线程同步的知识。

[java] view plain copy
  1. package xiaojie;  
  2.   
  3. public class Maipiao  {  
  4.     public static void main(String[] args) {  
  5.         xc xc1=new xc();  
  6.         Thread bb=new Thread(xc1);  
  7.         bb.start();  
  8.         xc xc2=new xc();  
  9.         Thread cc=new Thread(xc2);  
  10.         cc.start();  
  11.     }  
  12. }  
  13. class xc implements Runnable{  
  14.     public static int chepiao=100;  
  15.     String aa=new String("1");//字符串随意定义  
  16.     @Override  
  17.     public void run() {  
  18.       
  19.             while(true){  
  20.                 synchronized (aa) {//修饰代码块(线程同步),也可以修饰函数  
  21.                 if(chepiao>0){  
  22.                     System.out.println("第"+Thread.currentThread().getName()+"个窗口正在卖第"+(101-chepiao)+"张票");  
  23.                     --chepiao;  
  24.                 }else{  
  25.                     break;  
  26.                 }  
  27.             }  
  28.         }  
  29.   
  30.           
  31.     }  
  32.       
  33. }  
在第20行代码中有可能会遇到错误,使一张票买了两次。曾经就遇到过这个问题!
解决方案:
只需要把第15行删掉,再把synchronized (aa)改写成synchronized ("1")即可!
原创粉丝点击