• 多线程的安全


    class IceBox implements Runnable{
     private int stic=30;
     private Object obj=new Object();
     public void run(){
      while(true){
       synchronized(obj){
        if(stic>0){
         //try{Thread.sleep(1)}catch(InterruptedException){};
         System.out.println(Thread.currentThread().getName()+"拿了一块棒冰"+"..........."+"余额为"+(--stic));
        }
       }
      }
     }
    }
    public class text30{
     public static void main(String[] args){
      IceBox I=new IceBox();
      Thread t1=new Thread(I,"爸爸");
      Thread t2=new Thread(I,"妈妈");
      Thread t3=new Thread(I,"我");
      t1.start();
      t2.start();
      t3.start();
     }
    }

    /*

    多线程安全的产生条件:多个线程共享了一个数据,由于cpu切换线程的随机性,导致多个线程都满足了run()中的判断而进入了该方法,但是因为多个线程共享了一个数据,那么当一个线程运行完后

    导致下面的数据不满足run()中的判断条件但是前面其它多个线程都已经进入了改方法,从而导致了错误。

    多线程安全解决方法:为了解决该安全问题,我们就应该给多线程共享的那个代码块封装起来并且上把锁,这个锁有synchroniazed(对象){代码块}创建,但是我们要注意的是在对象的选择上我们要选择一个对象,不然不同对象给它们上了不同的锁,也就起不到该有的作用了。

    */

  • 相关阅读:
    集训第五周动态规划 G题 回文串
    集训第五周动态规划 F题 最大子矩阵和
    集训第五周动态规划 E题 LIS
    集训第五周动态规划 D题 LCS
    集训第五周动态规划 C题 编辑距离
    集训第五周 动态规划 B题LIS
    集训第五周 动态规划 最大子段和
    防线问题
    P2486 [SDOI2011]染色
    P2146 [NOI2015]软件包管理器
  • 原文地址:https://www.cnblogs.com/daoxiang1992/p/5698856.html
Copyright © 2020-2023  润新知