加法程序,现在的问题是我用了synchronized关键字,为什么还是出现了冲突,求解。
public class ThreadSum
{
//data field
static Num num = new Num(0);
public static void main(String[] args)
{
for(int i = 1; i <= 100; i++)
{
new Thread(new AddTask()).start();
}
System.out.print(num.getNum());
}
static class AddTask implements Runnable
{
public void run()
{
synchronized(num)
{
num.setNum(num.getNum() + 1);
}
}
}
}class Num
{
private int num;
Num(int num)
{
this.num = num;
}
public int getNum()
{
return num;
}
public void setNum(int num)
{
this.num = num;
}
}
num是static的,所以相当于单线程执行,
你的线程可能还没执行结束,main线程就打印了,LZ是不是指这个?
{
num.setNum(num.getNum() + 1);
}System.out.print(num.getNum());
不是的,线程没有冲突,在所有线程执行完之后,num是100的,只是有可能你的主线的打印比后面一些线程早执行,所以就不是100了.