• 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)
  • 相关阅读:
    计算机中的那些缩写词
    Linux 下dns的搭建
    html中的定位
    编程基础之流程控制
    linux中kvm的安装及快照管理
    zabbix 中监控windows 的typepref中的值
    详解Linux交互式shell脚本中创建对话框实例教程_linux服务器
    rhel7 单用户修改root密码
    Linux vim编辑器使用详解
    Linux下用ftp更新web内容!
  • 原文地址:https://www.cnblogs.com/gxcstyle/p/6802045.html
Copyright © 2020-2023  润新知