A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© canvas 黑马帝   /  2011-10-12 01:15  /  3532 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

蒋先 黑马帝 2011-10-12 10:56:46
楼主
代码你可以这样写:
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();   
            }   
        }   
    }   
}  

评分

参与人数 1技术分 +1 黑马币 +4 收起 理由
wangfayin + 1 + 4 赞一个!

查看全部评分

回复 使用道具 举报
设计4个线程,其中两个线程每次对j增加1,另外两个线程对j每次减少1。写出程序。
以下程序使用内部类实现线程,对j增减的时候没有考虑顺序问题。

评分

参与人数 1技术分 +1 收起 理由
wangfayin + 1

查看全部评分

5 个回复

倒序浏览
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();

    }

    }

    }

    }



评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

回复 使用道具 举报
张磊 黑马帝 2011-10-13 11:32:06
板凳
蒋先 发表于 2011-10-12 10:56
代码你可以这样写:
public class ThreadIncDec {   
  

线程之间应该有通信吧
回复 使用道具 举报
这个面试题考的是并发库中新增加的只读锁和只写锁机制。。。楼上写的都是以前那种同步使用,效率会稍微低点
回复 使用道具 举报
看不大懂。。。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马