• 线程之线程安全解决


    /**
     * 线程安全问题产生的解决思路:
     * 就是将多条操作共享数据的线程代码封装起来,当有线程在执行这些代码的时候
     * 其它线程时不可以参与运算的
     * 必须要当前线程把这些代码都执行完毕后,其它线程才可以参与运算
     * 
     * 在java中,用同步代码块就可以解决这个问题
     * 
     * 同步代码块的格式:
     * synchronize(对象)
     * {
     *    需要被同步的代码;
     * }
     * 
     * 同步的好处:解决了线程的安全问题
     * 
     * 同步的弊端:相对降低了效率,因为同步外的线程都会判断同步锁
     * 
     * 同步的前提:必须有多个线程并使用同一个锁
     * @author 罗摩衔那
     *
     */
    
    class Tick1 implements Runnable{
    
         private int num=100;//定义一百张票
         Object obj=new Object();     
         public void run() 
         {
             while(true)
             {
                 synchronized(obj)
               { 
                 if(num>0)
                 {
                     try {Thread.sleep(10);}catch(InterruptedException e) {}
                     
                     System.out.println(Thread.currentThread().getName()+"...sale..."+num--);
                 }
               }
             }
         }
    }
    public class Ticket_Demo3 
    {
       public static void main(String[] args) 
       {
          Tick1 d=new Tick1();//创建一个线程任务对象
          
          Thread t1=new Thread(d);
          Thread t2=new Thread(d);
          Thread t3=new Thread(d);
          Thread t4=new Thread(d);
          
          t1.start();
          t2.start();
          t3.start();
        }
    }

    温馨小提示:如果不加入synchronize(对象){}函数块,就会出现线程安全现象的产生.synchronize中的对象相当于一把锁,个人理解为缓存区,一旦一个线程进入就必须执行完己身任务,相当于缓存区已满,其它线程就无法进入.

  • 相关阅读:
    vue中富文本编辑框
    vue中生成二维码
    在ABP中使用linq
    js根据年月得到当前这个月总共有多少天
    mescroll在vue中的应用
    javascript积累
    javascript常用的操作
    情侣间常犯的7个沟通问题
    欧洲旅游六大最佳目的地
    见与不见
  • 原文地址:https://www.cnblogs.com/zjm1999/p/9879644.html
Copyright © 2020-2023  润新知