首页 > 试题广场 >

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

[问答题]

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

class Resource
{
	private int j=0;
	//j增加1
	public synchronized void add(){
		j++;
		System.out.println(Thread.currentThread().getName()+"...add..."+"目前j的值为:"+j);

	}
	//j减少1
	public synchronized void des(){
		j--;
		System.out.println(Thread.currentThread().getName()+"-des-"+"目前j的值为:"+j);
	}
}

class FourThreadTest 
{
	//创建Resource对象
	private Resource resource = new Resource();
	public static void main(String[] args) 
	{
		FourThreadTest fourThread = new FourThreadTest();
		fourThread.test();
	}

	public void test(){
		for(int i=0;i<2;i++){
			new Thread(new Runnable(){
				public void run(){
					while(true){
						try
						{
							Thread.sleep((long)(Math.random()*1000));
						}
						catch (InterruptedException e)
						{
							e.printStackTrace();
						}
						resource.add();
					}
				}
			}).start();

			new Thread(new Runnable(){
				public void run(){
					while(true){
						try
						{
							Thread.sleep((long)(Math.random()*1000));
						}
						catch (InterruptedException e)
						{
							e.printStackTrace();
						}
						resource.des();
					}
				}	
			}).start();
		}
	}
}

发表于 2017-01-15 22:35:05 回复(2)
public class Main{
    private int j=0;//定义变量j
    public synchronized add(){
        j++;//定义同步方法每次只有一个线程对j进行j++操作
    }
    public synchronized dec(){
      j--;//定义同步方法每次只有一个线程对j进行j--操作
    }
   public static void main(String[] args){
         for(int i=0;i<2;i++){
              new Thead(new Runnable(){//使用匿名内部类进行线程的创建,重写run()方法,调用add()方法
            public void run(){
           while(true){
                 add();
           }
         }
         }).start();
         new Thead(new Runnable(){//使用匿名内部类进行线程的创建,重写run()方法,调用dec()方法
           public void run(){
              while(true){
                dec();
           }
          }
        }).start();
        }
   }
}

发表于 2016-12-14 19:06:25 回复(3)