JavaSE进阶

private int tick = 100;

 

       public void run() {

              while (true) {

                     if (tick > 0) {

                            try {

                                   Thread.sleep(10);

                            } catch (InterruptedException e) {

                                   e.printStackTrace();

                            }

                            System.out.println(Thread.currentThread().getName() + "售出车票,tick号为:" + tick--);

                     }

              }

       }

 

  • 多线程出现了安全问题
  • 问题的原因:

当多条语句在操作同一个线程共享数据时,一个线程对多条语句只执行了一部分,还没有执行完,另一个线程参与进来执行。导致共享数据的错误。

  • 解决办法

对多条操作共享数据的语句,只能让一个线程都执行完,在执行过程中,其他线程不可以参与执行。

15.4.2 Synchronized的使用方法

  • Java对于多线程的安全问题提供了专业的解决方式: 同步代码块

 

1)synchronized (对象){

          // 需要被同步的代码;

       }

  • synchronized还可以放在方法声明中,表示整个方法

      为同步方法。

例如:

      public synchronized void show (String name){

            ….

      }