中科院架构师,专注企业数字化各个方面,MES/ERP/CRM/OA、物联网、传感器、大数据、ML、AI、云计算openstack、Linux、SpringCloud。
分类: Java
2013-11-27 11:40:10
package atest.myThread;
/**
* 产品属性及交互类
* @author
* @version $Revision$
*/
public class SellForm {
int productNum;
// customer
public int getProductNum() {
System.out.println("Customer:" + productNum);
return productNum;
}
// produce
public void setProductNum(int productNum) {
this.productNum = productNum;
System.out.println("Producer:" + productNum);
}
}
package atest.myThread;
/**
*
* 動作行為類:生產者
* @author
* @version $Revision$
*/
public class Producer implements Runnable {
SellForm sf;
// 构造函数
Producer(SellForm sf){
this.sf = sf;
new Thread(this, "Producer").start();
}
@Override
public void run() {
// TODO 自動生成されたメソッド?スタブ
int i = 0;
while(true){
sf.setProductNum(i++);
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO 自動生成された catch ブロック
e.printStackTrace();
}
}
}
}
package atest.myThread;
/**
*
* 動作行為類:消費者
* @author
* @version $Revision$
*/
public class Customer implements Runnable {
SellForm sf;
public Customer(SellForm sf) {
// TODO 自動生成されたコンストラクター?スタブ
this.sf = sf;
new Thread(this, "Customer").start();
}
@Override
public void run() {
// TODO 自動生成されたメソッド?スタブ
while(true){
sf.getProductNum();
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO 自動生成された catch ブロック
e.printStackTrace();
}
}
}
}
package atest.myThread;
/**
* 产品实行类
* @author
* @version $Revision$
*/
public class SellPCBlogic {
/**
* [メソッドの説明を書きましょう]
* @param args
*/
public static void main(String[] args) {
// TODO 自動生成されたメソッド?スタブ
SellForm sf = new SellForm();
new Producer(sf);
new Customer(sf);
System.out.print("Ctrl+C to pause!");
}
}
因为没有同步所以是线程不安全的,执行结果如下:
Producer:0
Ctrl+C to pause!Customer:0
Producer:1
Customer:1
Customer:1
Producer:2
Customer:2
Producer:3
Producer:4
Customer:4
Producer:5
Customer:5
Customer:5
Producer:6
没有如想象的交替进行,customer3缺,customer5多。
修正方式请参照java多线程编程(2)
http://blog.chinaunix.net/uid-7374279-id-4013353.html