• 题目:设计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  }
  • 相关阅读:
    JPA 系列教程1-环境搭建
    微信企业号接收消息(使用SpringMVC)
    oracle xe 数据库用户操作
    eclipse快捷键
    堆和栈的区别(重要)
    synchronized的4种用法
    servlet匹配规则和顺序
    JAVA中的枚举
    JSON对象操作
    Handler
  • 原文地址:https://www.cnblogs.com/151-seal/p/3188408.html
Copyright © 2020-2023  润新知