• 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)
  • 相关阅读:
    本周读书的感想
    程序员应知——学习、思考与分享
    用设计版面的思想编写漂亮的代码
    程序员应知——你有几种武器
    《明星DBA成长之路》读后随想
    有些东西不可替代
    DB2连接串&DB2客户端连接服务端
    数据库连接字符串备忘大全
    ASP Blob类型转存为Long Raw类型
    Oracle read_csv
  • 原文地址:https://www.cnblogs.com/gxcstyle/p/6802045.html
Copyright © 2020-2023  润新知