黑马程序员技术交流社区

标题: 一个面试题 [打印本页]

作者: canvas    时间: 2011-10-12 01:15
标题: 一个面试题
设计4个线程,其中两个线程每次对j增加1,另外两个线程对j每次减少1。写出程序。
以下程序使用内部类实现线程,对j增减的时候没有考虑顺序问题。
作者: 蒋先    时间: 2011-10-12 10:56
代码你可以这样写:
public class ThreadIncDec {   
  
    private int j;   
  
    public static void main(String[] args) {   
        ThreadIncDec incDec = new ThreadIncDec();   
        Inc inc = incDec.new Inc();   
        Dec dec = incDec.new Dec();   
        for (int i = 0; i < 2; i++) {   
            Thread t = new Thread(inc);   
            t.start();   
            t = new Thread(dec);   
            t.start();   
        }   
    }   
      
    //计数加一   
    private synchronized void inc() {   
        j++;   
        System.out.println(Thread.currentThread().getName() + "-inc:" + j);   
    }   
  
    //计数减一   
    private synchronized void dec() {   
        j--;   
        System.out.println(Thread.currentThread().getName() + "-dec:" + j);   
    }   
  
    //内部类实现的线程,线程对计数器加一   
    class Inc implements Runnable {   
        public void run() {   
            for (int i = 0; i < 100; i++) {   
                inc();   
            }   
        }   
    }   
  
    //内部类实现的线程,线程对计数器减一   
    class Dec implements Runnable {   
        public void run() {   
            for (int i = 0; i < 100; i++) {   
                dec();   
            }   
        }   
    }   
}  

作者: 郭帅    时间: 2011-10-13 08:44
public class ThreadTest1{

    private int j;

    public static void main(String args[]){

    ThreadTest1 tt=new ThreadTest1();

    Inc inc=tt.new Inc();

    Dec dec=tt.new Dec();

    for(int i=0;i<2;i++){

    Thread t=new Thread(inc);

    t.start();

    t=new Thread(dec);

    t.start();

    }

    }

    private synchronized void inc(){

    j++;

    System.out.println(Thread.currentThread().getName()+"-inc:"+j);

    }

    private synchronized void dec(){

    j--;

    System.out.println(Thread.currentThread().getName()+"-dec:"+j);

    }

    class Inc implements Runnable{

    public void run(){

    for(int i=0;i<100;i++){

    inc();

    }

    }

    }

    class Dec implements Runnable{

    public void run(){

    for(int i=0;i<100;i++){

    dec();

    }

    }

    }

    }




作者: 张磊    时间: 2011-10-13 11:32
蒋先 发表于 2011-10-12 10:56
代码你可以这样写:
public class ThreadIncDec {   
  

线程之间应该有通信吧
作者: 梁锡伟    时间: 2011-10-13 18:23
这个面试题考的是并发库中新增加的只读锁和只写锁机制。。。楼上写的都是以前那种同步使用,效率会稍微低点
作者: 陈胜华    时间: 2015-4-10 00:23
看不大懂。。。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2