线程间通信

时间:2011-02-19 02:25:19
【文件属性】:

文件名称:线程间通信

文件大小:2KB

文件格式:RAR

更新时间:2011-02-19 02:25:19

线程

//Java就业培训教程 第5章,线程间通信
package com;

class Q{
private String name="陈琼";
private String sex ="女 ";
public synchronized void put(String name,String sex){
this.name=name;
try{
Thread.sleep(10);
}catch(Exception e){
System.out.println(e.getMessage());
}
this.sex=sex;
}
public synchronized void get(){
System.out.println(name+"-->"+sex);
}
}

class Producer implements Runnable{
Q q=null;
public Producer(Q q){
this.q=q;
}
public void run(){
int i=0;
while(true){
if(i==0){
q.put("张孝祥","男");
}else{
q.put("陈琼","女");
}
i=(i+1)%2;
}
}
}


class Consumer implements Runnable{
Q q=null;
public Consumer(Q q){
this.q=q;
}
public void run(){
while (true){
q.get();
}
}
}

public class page208{
public static void main(String args[]){
Q q=new Q();
//q.get();
new Thread(new Producer(q)).start();
new Thread(new Consumer(q)).start();
}
}

/*
运行结果:
张孝祥-->男
张孝祥-->男
陈琼-->女
张孝祥-->男
陈琼-->女
张孝祥-->男
陈琼-->女
张孝祥-->男
张孝祥-->男
张孝祥-->男
张孝祥-->男

可以看出:并不是写入一次,就读取一次,而是有时读了多次同样的数据。
* */


//Java就业培训教程 第5章,线程间通信
package com;

class Q{
private String name="陈琼";
private String sex ="女 ";
//当bFull为 true ,Consumer线程才能取走数据,取走数据后bFull置为 false
//当bFull为 false,Procucer线程才能写入数据,写入数据后bFull置为 true
boolean bFull=false;
public synchronized void put(String name,String sex){
if (bFull){//可以取走数据
try{
wait(); //请等待,先不要写入数据,等待另一线程取走数据
}catch(Exception e){}
}
this.name=name;
try{
Thread.sleep(10);
}catch(Exception e){System.out.println(e.getMessage());}

this.sex=sex;
bFull=true; //写入数据完毕,可以读取数据。
notify(); //唤醒Producer线程.
}
public synchronized void get(){
if(!bFull){
try{
wait(); //请等待,先不要读取数据,等待另一线程写入数据。
}catch(Exception e){}
}
System.out.println(name+"-->"+sex);
bFull=false; ////读取数据完毕,可以写入数据。
notify(); //唤醒Consumer线程.
}
}

class Producer implements Runnable{
Q q=null;
public Producer(Q q){
this.q=q;
}
public void run(){
int i=0;
while(true){
if(i==0){
q.put("张孝祥","男");
}else{
q.put("陈琼","女");
}
i=(i+1)%2;
}
}
}


class Consumer implements Runnable{
Q q=null;
public Consumer(Q q){
this.q=q;
}
public void run(){
while (true){
q.get();
}
}
}

public class page210{
public static void main(String args[]){
Q q=new Q();
//q.get();
new Thread(new Producer(q)).start();
new Thread(new Consumer(q)).start();
}
}

/*
运行结果:
张孝祥-->男
陈琼-->女
张孝祥-->男
陈琼-->女
张孝祥-->男
陈琼-->女
张孝祥-->男

可以看出:写入一次,就读取一次.
* */















【文件预览】:
线程间通信
----page208.java(1KB)
----page210.java(2KB)

网友评论

  • 想找VC的,结果下了个JAVA的。一样要感谢楼主!
  • 想找VC的,结果下了个JAVA的。一样要感谢楼主!