题目:设计4个线程,其中两个线程每次对j增加1,另外两个线程对j每次减少1。写出程序。

 1 public class ThreadTest
 2  {
 3      private int j;
 4      public static void main(String[] args)
 5      {
 6          ThreadTest t = new ThreadTest();
 7          Add add = t.new Add();
 8          Sub sub = t.new Sub();
 9          
10          for(int i=0;i<2;i++)
11          {
12              Thread t1 = new Thread(add);
13              t1.start();
14              Thread t2 = new Thread(sub);
15              t2.start();
16          }
17      }
18      
19      /*这里add方法和sub方法加synchronized关键字是因为当两个线程同时操作同一个变量时,
20       * 就算是简单的j++操作时,在系统底层也是通过多条机器语句来实现,所以在执行j++过程也是要耗费时间,
21       * 这时就有可能在执行j++的时候,另外一个线程H就会对j进行操作,因此另外一个线程H可能操作的可能就
22       * 不是最新的值了。因此要提供线程同步。 
23       */
24      private synchronized void add()  
25      {
26          j++;
27          System.out.println(Thread.currentThread().getName()+":"+j);
28      }
29      
30      private synchronized void sub()
31      {
32          j--;
33          System.out.println(Thread.currentThread().getName()+":"+j);
34      }
35      
36      class Add implements Runnable
37      {
38          public void run()
39          {
40              for(int i=0;i<100;i++)
41              {
42                  add();
43              }
44          }
45      }
46      
47      class Sub implements Runnable
48      {
49          public void run()
50          {
51              for(int i=0;i<100;i++)
52              {
53                  sub();
54              }
55          }
56      }
57  }
原文地址:https://www.cnblogs.com/151-seal/p/3188408.html