美文网首页
设计4个线程,其中两个线程每次对j增加1,另外两个线程对j每次减

设计4个线程,其中两个线程每次对j增加1,另外两个线程对j每次减

作者: 小怪兽打葫芦娃 | 来源:发表于2017-07-13 16:56 被阅读673次

Android程序员面试宝典

以下程序使用内部类实现线程,对j增减的时候没有考虑顺序问题。

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(); 
       } 
   } 
} 
} 

----------随手再写的一个-------------
class A{
JManger j =new JManager();
main(){
    new A().call();
}

void call{
    for(int i=0;i<2;i++){
        new Thread(
            new Runnable(){ public void run(){while(true){j.accumulate()}}}
        ).start();
        new Thread(new Runnable(){ public void run(){while(true){j.sub()}}}).start();
    }
}
}

class JManager{
    private j = 0;
    
    public synchronized void subtract()
    {
        j--
    }
    
    public synchronized void accumulate()
    {
        j++;
    }
    
}

相关文章

网友评论

      本文标题:设计4个线程,其中两个线程每次对j增加1,另外两个线程对j每次减

      本文链接:https://www.haomeiwen.com/subject/oatghxtx.html