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

    java 线程安全


    ####本程序以简单但买票为例
    ####创建线程之后虽然可以方便一些操作,但是也有一些问题。(献上代码) ``` class Ticket implements Runnable { private int tick = 100;
        public void run()
        {
            try{//此处的线程睡眠仅仅是为了使实验结果更明显
                Thread.sleep(10);
            }catch(Exception e)//在这里简单的写一下,主要是提示线程切换的问题
            {
            }
            System.out.println(currentThread.getName()+"....sale:"+tick--);  
        }
    }
    
    class ThreadDemo
    {
        public static void main(String[] args)
        {
            Ticket t = new Ticket();//创建一个Ticket对象
    
            Thread t1 = new Thread(t);
            Thread t2 = new Thread(t);
            Thread t3 = new Thread(t);
            Thread t4 = new Thread(t);
    
            t1.start();//将各各线程t1,t2,t3,t4线程启动
            t2.start();
            t3.start();
            t4.start();
        }
    }
    
    <br/>
    ####线程虽然实现了启动,但是在买票的过程中会出现一些异常的现象。(如下图)
    <br/>![](http://images2015.cnblogs.com/blog/1017814/201705/1017814-20170503151351742-662630945.png)
    <br/>
    ####在卖票系统中是不会出现-2,-1,0等问题的,但是由于多线程的原因造成有负数的出现,从而造成票的标号有负数
    <br/>
    ####如何解决上述的问题呢
    
    class Ticket implements Runnable
    {
        private int tick = 100;
        
        private Object obj = new Object();
        public void run()
        {
            try{
                Thread.sleep(10);
            }catch(Exception e)//在这里简单的写一下,主要是提示线程切换的问题
            {
            }
            synchronized(obj)
            {
                if(tick >0)
                {
                     System.out.println(currentThread.getName()+"....sale:"+tick--);  
    
                 }
    
            }
        }
    }
    
    <br/>
    ####使用synchronized(Object obj)使用该方法就可以实现线程同步的问题
    <br/>![](http://images2015.cnblogs.com/blog/1017814/201705/1017814-20170503153552257-1001875104.png)
  • 相关阅读:
    geowebcache发布 arcgis 瓦片
    BLANK
    基于 SpringBoot 高仿某度网盘项目,前后端分离(含源码)
    基于SpringBoot+WebMagic实现一个的爬虫框架
    博客园主题
    vue el 自动计算时间加1天
    python报警告qt.gtimg.cn
    量化交易日志
    mybatis 一对多。对多对
    DBeaver执行SQL脚本,导入导出
  • 原文地址:https://www.cnblogs.com/gxcstyle/p/6802045.html
Copyright © 2011-2022 走看看