分享

Java面试题--设计4个线程,其中两个线程每次对j增加1,另外两个线程对j每次减少1

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

Java代码  收藏代码
  1. package com.yx.zzg;  
  2.   
  3. public class ThreadTest1 {  
  4.   
  5.     private int j;  
  6.   
  7.     public static void main(String args[]) {  
  8.   
  9.         ThreadTest1 tt = new ThreadTest1();  
  10.   
  11.         Inc inc = tt.new Inc();  
  12.   
  13.         Dec dec = tt.new Dec();  
  14.   
  15.         for (int i = 0; i < 2; i++) {  
  16.             Thread t = new Thread(inc);  
  17.             t.start();  
  18.             t = new Thread(dec);  
  19.             t.start();  
  20.         }  
  21.   
  22.     }  
  23.   
  24.     private synchronized void inc() {  
  25.         j++;  
  26.         System.out.println(Thread.currentThread().getName() + "-inc:" + j);  
  27.     }  
  28.   
  29.     private synchronized void dec() {  
  30.         j--;  
  31.         System.out.println(Thread.currentThread().getName() + "-dec:" + j);  
  32.     }  
  33.   
  34.     class Inc implements Runnable {  
  35.   
  36.         public void run() {  
  37.             for (int i = 0; i < 100; i++) {  
  38.                 inc();  
  39.             }  
  40.         }  
  41.     }  
  42.   
  43.     class Dec implements Runnable {  
  44.   
  45.         public void run() {  
  46.             for (int i = 0; i < 100; i++) {  
  47.                 dec();  
  48.             }  
  49.         }  
  50.     }  
  51.   
  52. }  



注:这里inc方法和dec方法加synchronized关键字是因为当两个线程同时操作同一个变量时,就算是简单的j++操作时,在系统底层也是通过多条机器语句来实现,所以在执行j++过程也是要耗费时间,这时就有可能在执行j++的时候,另外一个线程H就会对j进行操作,因此另外一个线程H可能操作的可能就不是最新的值了。因此要提供线程同步。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多