zoukankan      html  css  js  c++  java
  • 线程之线程安全解决

    /**
     * 线程安全问题产生的解决思路:
     * 就是将多条操作共享数据的线程代码封装起来,当有线程在执行这些代码的时候
     * 其它线程时不可以参与运算的
     * 必须要当前线程把这些代码都执行完毕后,其它线程才可以参与运算
     * 
     * 在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中的对象相当于一把锁,个人理解为缓存区,一旦一个线程进入就必须执行完己身任务,相当于缓存区已满,其它线程就无法进入.

  • 相关阅读:
    /tmp/orbit-oracle/目录inode耗尽
    sp_change_users_login 'Update_One', '用户名', '登录名';
    自动载入Python虚拟环境
    Windows下安装MySQL详细教程
    python版本下载时时,官方目录web-based与executable和embeddable 的区别
    print,printf,println
    大文件文本数据处理
    通过文件指针插入文件内容
    sizeof和strlen的使用
    java八大基本数据类型
  • 原文地址:https://www.cnblogs.com/zjm1999/p/9879644.html
Copyright © 2011-2022 走看看