用4个线程 2个让i++  另外2个让i--   打印出来 虽然最终结果是100  (i一开始等于100)  但是中间不明白的是 i=101 i=102...这样一直下去  换个线程打印的时候显示的是i=  差很远的数字。。  也就是说没有接着原来的数字加减。。  
下面是代码 本人初识多线程求大神们解答
public class test {

/**
 * @param args
 */
public static int i = 100;
public static void main(String[] args) {

testThread t1 = new testThread(1);
testThread t2 = new testThread(1);
testThread t3 = new testThread(0);
testThread t4 = new testThread(0);
new Thread(t1).start();
new Thread(t2).start();
new Thread(t3).start();
new Thread(t4).start();
}}class testThread implements Runnable{
private int j;
public testThread(int j){
this.j=j;
}
public testThread(){}

public void run(){
int count = 50;
while(count>0){
if(j==1){
//add();
System.out.println("当前线程:"+Thread.currentThread().getName()+"增加票数至"+(++test.i)+"张");
}else if(j==0){
System.out.println("当前线程:"+Thread.currentThread().getName()+"减少票数至"+(--test.i)+"张");
//modfiy();
}
count--; }
}
/*public synchronized  void add(){
System.out.println("当前线程:"+Thread.currentThread().getName()+"增加票数至"+(++test.i)+"张");
}
public synchronized  void modfiy(){
Syste*/
}
多线程java

解决方案 »

  1.   


    相差很远么?
    可能是如此。
    线程A 在打印的时候,正准备打印 i=100;
    这个时候,线程B抢去了资源,让A没有打印。于是线程B就连续进行了20次相加。
    结果最后打印出i=120;
    这个时候,线程A再夺回执行权。
    但是他打印的结果,却依然按照100进行打印。
    但是如果A属于减的线程,那么下一条应该是打印出119.而不是99.当然,线程具有一些不确定性,我也不了解,而且你这里有这么多,具体可能出现更加难以理解的情况吧。