zoukankan      html  css  js  c++  java
  • 多线程的安全

    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(对象){代码块}创建,但是我们要注意的是在对象的选择上我们要选择一个对象,不然不同对象给它们上了不同的锁,也就起不到该有的作用了。

    */

  • 相关阅读:
    将包含<pre>标签的json转换成js
    JS 获取系统时间
    JS 对url进行编码
    DevExpress.XtraCharts.ChartControl 实例
    VB 窗体继承
    datagrid 属性
    SQLite操作总结
    Struts2 简介及学习方法介绍
    struts2 中使用DMI(动态调用方法)方式配置action
    JSP 里 的 basePath
  • 原文地址:https://www.cnblogs.com/daoxiang1992/p/5698856.html
Copyright © 2011-2022 走看看