多线程问题 四个线程 两个线程对i +1 另个-1 新手求解答

来源:互联网  时间:2016/7/19 7:36:06

关于网友提出的“ 多线程问题 四个线程 两个线程对i +1 另个-1 新手求解答”问题疑问,本网通过在网上对“ 多线程问题 四个线程 两个线程对i +1 另个-1 新手求解答”有关的相关答案进行了整理,供用户进行参考,详细问题解答如下:

问题: 多线程问题 四个线程 两个线程对i +1 另个-1 新手求解答
描述:

JAVA  多线程 同步机制

package Demo;
 class ThreadText implements Runnable{
 Num num;
@Override
public void run() {
while(true){
synchronized (num) {
System.out.println(Thread.currentThread().getName()+":"+num.i++);
}
}
}
}
 class ThreadText2 implements Runnable{
 
Num num;
@Override
public   void run() {
while(true){
synchronized (num) {
System.out.println(Thread.currentThread().getName()+":"+num.i--);
}
}
}
 
 }
public class Demo6 {
public static void main(String[] args) {
ThreadText T0=new ThreadText();
ThreadText2 T=new ThreadText2();
Thread T1=new Thread(T0);
Thread T2=new Thread(T0);
Thread T3=new Thread(T);
Thread T4=new Thread(T);
T1.start();
T2.start();
T3.start();
T4.start();
}
}
class Num{
 int i;
}
解决方案1:

Num是个对象,使用对象的方法需要new出一个实例才行,或者把Num中的i变为静态变量


package Demo;
class ThreadText implements Runnable{
    public void run() {
        while(true){
            synchronized (Num.class) {
                System.out.println(Thread.currentThread().getName()+":"+Num.i++);
            }
            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }
}
class ThreadText2 implements Runnable{
    public   void run() {
        while(true){
            synchronized (Num.class) {
                System.out.println(Thread.currentThread().getName()+":"+Num.i--);
            }
            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }
}
public class Demo6 {
    public static void main(String[] args) {
        ThreadText T0=new ThreadText();
        ThreadText2 T=new ThreadText2();
        Thread T1=new Thread(T0);
        Thread T2=new Thread(T0);
        Thread T3=new Thread(T);
        Thread T4=new Thread(T);
        T1.start();
        T2.start();
        T3.start();
        T4.start();
    }
}
class Num{
    public static int i;
}

上一篇javaEE为什么是企业级应用?
下一篇spring配置了事务管理器,在dao层使用 @transactional 不起作用
明星图片
相关文章
《 多线程问题 四个线程 两个线程对i +1 另个-1 新手求解答》由码蚁之家搜集整理于网络,
联系邮箱:mxgf168#qq.com(#改为@)