黑马程序员技术交流社区

标题: 线程问题 [打印本页]

作者: yangshang1    时间: 2012-3-29 14:23
标题: 线程问题
设计4个线程,其中两个线程每次对j增加1,另外两个线程对j每次减少1。
作者: yangshang1    时间: 2012-3-29 20:06


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

    }

    }

    }

    }


已解决共享
作者: 邓飞飞    时间: 2012-3-29 21:19
这是我根据“生产者和消费者”例子编写的,这个例子课件里有,你可以看看完之后自己写,我写这个只是交流交流,这个程序还有很多不合理的地方,需要改进,但由于本人技术有限只能写成这样了,没有写注释,你看了那个例子之后就很轻松的看懂了。
class Res
{
   private int j;
   private boolean flag=false;
   public synchronized void add()
     {
      while(flag)
          try
            {
             wait();
             }
           catch(Exception e)
            {  }
       System.out.println("j++:"+j++);
        flag=true;
        this.notifyAll();
      }
    public synchronized void sub()
     {
       while(!flag)
          try
            {
             wait();
             }
           catch(Exception e)
            {  }
       System.out.println("j--:"+j--);
         flag=false;
        this.notifyAll();
      }
}
class Zz implements Runnable
{
     private Res z;
      Zz(Res z)
      {
         this.z=z;
       }
     public void run()
     {   
        while(true)
         {
          z.add();
          }
      }
}
class Zj implements Runnable
{
     private Res j;
      Zj(Res j)
      {
        this.j=j;
        }
     public void run()
     {  
         while(true)
         {
         j.sub();
         }
      }
}
class Demotest
{
  public static void main(String[] args)
     {
         Res r=new Res();
         Zz sum= new Zz(r);
         Thread t1=new Thread(sum);
         Thread t2=new Thread(sum);
         t1.start();
          t2.start();
         Zj sub1= new Zj(r);
         Thread  t3=new Thread(sub1);
         Thread  t4=new Thread(sub1);
          t3.start();
          t4.start();
      }
}




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