黑马程序员技术交流社区

标题: 【分享】设计4个线程,其中两个线程每次对j增加1,另外两个线程对j每次减少1 [打印本页]

作者: q312092921    时间: 2016-4-2 23:10
标题: 【分享】设计4个线程,其中两个线程每次对j增加1,另外两个线程对j每次减少1
以下程序使用内部类实现线程,对j增减的时候没有考虑顺序问题。
  1. public class ThreadTest1

  2. {

  3. private int j;

  4. public static void main(String args[]){

  5.    ThreadTest1 tt=new ThreadTest1();

  6.    Inc inc=tt.new Inc();

  7.    Dec dec=tt.new Dec();

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

  9.        Thread t=new Thread(inc);

  10.        t.start();

  11.       t=new Thread(dec);

  12.        t.start();

  13.        }

  14.    }

  15. private synchronized void inc(){

  16.    j++;

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

  18.    }

  19. private synchronized void dec(){

  20.    j--;

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

  22.    }

  23. class Inc implements Runnable{

  24.    public void run(){

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

  26.        inc();

  27.        }

  28.    }

  29. }

  30. class Dec implements Runnable{

  31.    public void run(){

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

  33.        dec();

  34.        }

  35.    }

  36. }

  37. }
复制代码


----------随手再写的一个-------------
  1. class A

  2. {

  3. JManger j =new JManager();

  4. main()

  5. {

  6.   new A().call();

  7. }



  8. void call

  9. {

  10.   for(int i=0;i<2;i++)

  11.   {

  12.    new Thread(

  13.          new Runnable(){ public void run(){while(true){j.accumulate()}}}

  14.    ).start();

  15.          new Thread(new Runnable(){ public void run(){while(true){j.sub()}}}).start();

  16. }

  17. }

  18. }



  19. class JManager

  20. {

  21.     private j = 0;

  22.   

  23.   public synchronized void subtract()

  24.   {

  25.       j--

  26.   }

  27.   

  28.   public synchronized void accumulate()

  29.   {

  30.         j++;

  31.   }

  32.   

  33. }
复制代码





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