java为什么线程安全_java多线程安全问题的解决

通过售票的例子

通过分析:发现,打印出0,-1,-2等错票。

多线程的运行出现了安全问题。

问题的原因:

当多条语句在操作同一个线程共享数据时。一个线程对多条语句只执行了一部分

还没执行完。另一个线程参与进来执行。导致共享数据的错误。

解决办法:

对多条操作共享数据的语句。只能让一个线程都执行完。在执行过程中。

其他线程不可以参与执行

java对于多线程的安全问题提供了专业的解决方式。

就是同步代码块。

synchronized(对象)

{

需要被同步的代码

}

/*

通过分析:发现,打印出0,-1,-2等错票。

多线程的运行出现了安全问题。

问题的原因:

当多条语句在操作同一个线程共享数据时。一个线程对多条语句只执行了一部分

还没执行完。另一个线程参与进来执行。导致共享数据的错误。

解决办法:

对多条操作共享数据的语句。只能让一个线程都执行完。在执行过程中。

其他线程不可以参与执行

java对于多线程的安全问题提供了专业的解决方式。

就是同步代码块。

synchronized(对象)

{

需要被同步的代码

}

*/

class Tickets implements Runnable

{

private int tick = 100;

Object obj = new Object();

public void run()

{

while(true)

{

synchronized(obj)

{

if(tick >0)

{

try

{

Thread.sleep(10);

}

catch (Exception e)

{

}

System.out.println("tick:"+tick--);

}

}

}

}

}

class Test_11_08

{

public static void main(String[] args)

{

System.out.println("Hello Wolrd");

Tickets t = new Tickets();

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();

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值