博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java多线程的安全问题
阅读量:5958 次
发布时间:2019-06-19

本文共 1014 字,大约阅读时间需要 3 分钟。

/*多线程的安全问题

1.为什么会出现安全问题?
因为程序在运行时,会出现一个线程在判断条件满足后,具备了执行资格,但没有运行代码
后一个线程也判断了条件,也具备了执行资格,后一个线程运行了代码,但这时候,线程运行的条件不满足了
这时候,就出现了安全问题
2.实现接口线程的方法不能抛出异常!
*/
/*运行情况
通过分析,发现,打印出0,-1,-2等错票。
多线程的运行出现了安全问题
问题的原因?
  当多条语句在操作同一线程共享数据时,一个线程对多条语句只执行了一部分,还没有执行完
  另一个线程参与进来,导致共享数据错误
 
解决办法
  对多条操作共享数据的语句,只能让一个线程都执行完。在执行过程中,其它线程不参与执行。
 
Java对于多线程的安全问题提供了专业的解决方式
就是同步代码块
格式:
    synchronized(对象)  对象可以随意(使用上帝就行)
    {
        需要被同步的代码(哪些代码在操作共享数据)
    }
*/
class Ticket implements Runnable //extends Thread
{
    object obj=new object();
    private static int tick=100;
    public void run()
    {
        while(true)
        {   synchronized(obj)
            {
                if(tick>0)
                {
                    try
                    {
                        Thread.sleep(10);   /*每次运行就沉睡一下*/
                    }
                    catch(Exception e)
                    {
                        
                    }
                    System.out.println(Thread.currentThread().getName()+"sale:--"+tick--);
                }
            }
          }
    }
}
class TicketDemo
{
    public static void main(String args[])
    {
        Ticket t=new Ticket();
        Thread t1=new Thread(t);
        Thread t2=new Thread(t);
        Thread t3=new Thread(t);
        Thread t4=new Thread(t);
        
        t1.start();
        t2.start();
        t3.start();
        t4.start();
    }
}

转载于:https://www.cnblogs.com/liangqiyuan/p/5658158.html

你可能感兴趣的文章
MySQL: Set user variable from result of query
查看>>
JVM调优之jstack找出最耗cpu的线程并定位代码
查看>>
厉害了,我的李楠!魅蓝E3发布会要上演“打飞机”?
查看>>
拿下中国物流界奥斯卡三项大奖,京东X事业部还有哪些黑科技
查看>>
天猫11·11:蚂蚁金服如何用小团队支撑数亿人买买买?
查看>>
阿里总部对外解密双11超级工程背后的数据库技术
查看>>
通信厂商做路由器,能做成什么样?
查看>>
福建漳州海域一货轮沉没 11人获救1人失联
查看>>
四川江安戏剧“青年训练营”:播撒颗颗戏剧种子
查看>>
中关村培养世界级科技领军企业
查看>>
香港最新失业率2.8% 劳工市场短期内料维持偏紧状态
查看>>
央行:中国金融风险总体收敛
查看>>
山西警方破获快递跨省运输贩毒案
查看>>
河北省政协十二届二次会议开幕
查看>>
沈阳国际冰雪季以“冰棋园”演绎冰雪“棋”迹
查看>>
为什么 Python 4.0 会与 Python 3.0 不同?
查看>>
Android无处不在,Android开发者大有可为
查看>>
Nodejs:使用Mongodb存储和提供后端CRD服务
查看>>
Dubbo配置直连
查看>>
一个小白的四次前端面试经历
查看>>