`
哈达f
  • 浏览: 120336 次
  • 性别: Icon_minigender_1
  • 来自: 广西
社区版块
存档分类
最新评论

同步代码块

    博客分类:
  • j2se
阅读更多

 

/*
多线程间的通讯。

多个线程在操作同一个资源。
但是操作的方式却不一样。
这里我们要给用同一资源作为锁,也就是监视器。Res r
*/
class Res
{
	String name;
	String sex;
	boolean  b = false;
}


class Input implements Runnable
{
	Res r ;
	Input(Res r)
	{
		this.r = r;
	}
	public void run()
	{
		int x = 0;

		while(true)
		{
			synchronized(r)
			{
				if(r.b)
					try{r.wait();}catch(Exception e){}

				if(x==0)
				{
					r.name = "mike";
					r.sex = "nan";
				}
				else
				{
					r.name = "丽丽";
					r.sex = "女女女女女";
				}
				x = (x+1)%2;
				r.b = true;
				r.notify();
			}
		}
	}
}


class Output implements  Runnable
{
	Res r ;
	
	Output(Res r)
	{
		this.r = r;
	}
	public void run()
	{
		while(true)
		{
			synchronized(r)
			{
				if(!r.b)
					try{r.wait();}catch(Exception e){}
				System.out.println(r.name+"...."+r.sex);
				r.b = false;
				r.notify();
			}
		}
	}
}


class  CommDemo
{
	public static void main(String[] args) 
	{
		Res r = new Res();
		Input in = new Input(r);
		Output out = new Output(r);

		Thread t1 = new Thread(in);
		Thread t2 = new Thread(out);

		t1.start();
		t2.start();
	}
}
/*

wait()
notify();
notifyAll();

*/
/*
多线程间的通讯。

多个线程在操作同一个资源。
但是操作的方式却不一样。

*/
class Res
{
	private String name;
	private String sex;
	private boolean  b = false;

	public synchronized void set(String name,String sex)
	{
		if(b)
			try{this.wait();}catch(Exception e){}
		this.name = name;
		this.sex = sex;
		b = true;
		notify();
	}
	public synchronized void out()
	{
		if(!b)
			try{wait();}catch(Exception e){}
		System.out.println(name+"...."+sex);
		b = false;
		notify();
	}
}


class Input implements Runnable
{
	Res r ;
	Input(Res r)
	{
		this.r = r;
	}
	public void run()
	{
		int x = 0;

		while(true)
		{		
			if(x==0)
			{
				r.set("mike","nan");
			}
			else
			{
				r.set("丽丽","女女女女女");
			}
			x = (x+1)%2;
		}
	}
}


class Output implements  Runnable
{
	Res r ;
	
	Output(Res r)
	{
		this.r = r;
	}
	public void run()
	{
		while(true)
		{
			r.out();
		}
	}
}


class  CommDemo2
{
	public static void main(String[] args) 
	{
		Res r = new Res();
		new Thread(new Input(r)).start();
		new Thread(new Output(r)).start();
		/*
		
		Input in = new Input(r);
		Output out = new Output(r);

		Thread t1 = new Thread(in);
		Thread t2 = new Thread(out);

		t1.start();
		t2.start();
		*/
	}
}
/*

wait()
notify();
notifyAll();



sleep(),wait();

sleep():释放资源的,不释放锁。
wait(): 释放资源,释放锁。
*/
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics