JAVA线程同步的生产者和消费者问题
class productor extends Thread{
Integer product;
productor(Integer product){
this.product = product;
}
public void run(){
synchronized(product){
for(int i = 0;i < 5;i++){
product++;
System.out.println( "The product is: " + product);
product.notify();
try{
product.wait();
}catch(Exception e){
e.printStackTrace();
}
}
product.notify();
}
}
}
class Consumer extends Thread{
Integer consumer;
Consumer(Integer consumer){
this.consumer = consumer;
}
public void run(){
synchronized(consumer){
for(int i = 0;i < 5;i++){
System.out.println( "The consumer is: " + consumer);
consumer.notify();
try{
consumer.wait();
}catch(Exception e){
e.printStackTrace();
}
}
consumer.notify();
}
}
}
public class test{
public static void main(String args[])
{
Integer i = new Integer(5);
new productor(i).start();
new Consumer(i).start();
}
}
在执行时,总是会报java.lang.IllegalMonitorStateException: current thread not owner请各位高手指点一下
[解决办法]
生产者和消费者模型不时这样的.
[解决办法]
两个 synchronized() 对象不是同一个
[解决办法]
你从网上找一下.张孝祥讲过这个问题.你应该再写一个类(实现生产和消费)
[解决办法]
public class ThreadTest {
public static void main(String args[]) {
Tickets i = new Tickets(10);
new Productor(i).start();
new Consumer(i).start();
}
}
class Tickets {
int number = 0;//票号.
int size;//总数.
boolean available = false;
public Tickets(int size) {
this.size = size;
}
}
class Productor extends Thread {
Tickets productor=null;
Productor(Tickets productor) {
this.productor = productor;
}
public void run() {
while(productor.number <productor.size){
synchronized(productor)
{
System.out.println( "The product is: " + (++productor.number));
productor.available = true;
}
}
}
}
class Consumer extends Thread {
Tickets consumer = null;
int i=0;
Consumer(Tickets consumer) {
this.consumer = consumer;
}
public void run() {
while(i <consumer.size){
synchronized(consumer)
{
if (consumer.available==true&&i <=consumer.number)
System.out.println( "The consumer is: " + (++i));
if (i == consumer.size)
try{sleep(1);}catch(Exception e){}
consumer.available = false;
}
}
}
}