假设有两个窗口合起来要卖100张票,这就涉及到数据共享的问题,故这里用到了线程同步的知识。
- package xiaojie;
- public class Maipiao {
- public static void main(String[] args) {
- xc xc1=new xc();
- Thread bb=new Thread(xc1);
- bb.start();
- xc xc2=new xc();
- Thread cc=new Thread(xc2);
- cc.start();
- }
- }
- class xc implements Runnable{
- public static int chepiao=100;
- String aa=new String("1");//字符串随意定义
- @Override
- public void run() {
- while(true){
- synchronized (aa) {//修饰代码块(线程同步),也可以修饰函数
- if(chepiao>0){
- System.out.println("第"+Thread.currentThread().getName()+"个窗口正在卖第"+(101-chepiao)+"张票");
- --chepiao;
- }else{
- break;
- }
- }
- }
- }
- }
在第20行代码中有可能会遇到错误,使一张票买了两次。曾经就遇到过这个问题!
解决方案:
只需要把第15行删掉,再把synchronized
(aa)改写成synchronized ("1")即可!