标签:runnable tar ext div system ring inter static rgs
线程安全问题产生的原因:多个线程在操作共享的数据。
解决思路;
就是将多条操作共享数据的线程代码封装起来,当有线程在执行这些代码的时候,其他线程时不可以参与运算的。必须要当前线程把这些代码都执行完毕后,其他线程才可以参与运算。
synchronized(对象)
{
需要被同步的代码 ;
}
1、多个窗口同时卖票,保证票数不<=0
public class MyThread {
public static void main(String[] args) throws InterruptedException
{
Ticket ticket = new MyThread().new Ticket();
//共享数据和操作共享数据的方法最好放在一个类中,这样加锁方便
for (int i = 0; i < 4; i++) {//开启4个窗口同时卖票
new Thread(ticket).start();
}
}
class Ticket implements Runnable//extends Thread
{
private int num = 1000;//操作共享数据
Object obj = new Object();//只new一次才能保证锁的唯一性
public void run()
{
while(true)
{
if(num>0)
{
synchronized(obj)
{
if(num>0)
{
try{Thread.sleep(10);}catch (InterruptedException e){}
System.out.println(Thread.currentThread().getName()+".....sale...."+num--);
}
}
}
}
}
}
}
2、
标签:runnable tar ext div system ring inter static rgs
原文地址:http://www.cnblogs.com/javabg/p/7394822.html