小测试,如何实现变量ticket的同步
private int ticket = 100;
public void run()
{
while(ticket > 0 ) {
System.out.println(ticket+" is saled by "+
Thread.currentThread().getName());
ticket--;
try
{
Thread.sleep(200);
}
catch (InterruptedException e)
{
e.printStackTrace();
}
}
}
这样写public synchronized void run()
{
while(ticket > 0 ) {
System.out.println(ticket+" is saled by "+
Thread.currentThread().getName());
ticket--;
try
{
Thread.sleep(200);
}
catch (InterruptedException e)
{
e.printStackTrace();
}
}
}
或者这样写
private Object obj = new Object();
public void run() {
synchronized (obj) {
while (ticket > 0) {
System.out.println(ticket + " is saled by "
+ Thread.currentThread().getName());
ticket--;
}
}
try {
Thread.sleep(200);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
synchronized(我是锁){我是线程;}是要这个么?
我是希望ticket保持同步,也就是多个线程操作同一个ticket变量
那就把ticket设置成static的 那样就可以了
ticket可以做成原子孙,不要用基本类型
想了下,这样不行,我考虑的是两步及多步操作的同步...