请教一个线程的问题!!! 线程threadjavabuffer 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 public class BufferLock{ private int value; private boolean isEmpty = true; public synchronized void put(int i) { while (!isEmpty) {// 当value不空时,等待 try { this.wait(); } catch (InterruptedException e) { e.printStackTrace(); } } this.value = i; System.out.println("Sender put" + i); isEmpty = false; notify(); } public synchronized int get() { while (isEmpty) {// 当value为空时,等待 try { this.wait(); } catch (InterruptedException e) { e.printStackTrace(); } } isEmpty = true; System.out.println("\t\t Receiver get: " + value); notify(); return value; } public static void main(String[] args) { BufferLock buffer = new BufferLock(); (new Sender2(buffer)).start(); (new Receiver2(buffer)).start(); }}class Sender2 extends Thread{ private BufferLock buffer; public Sender2(BufferLock buffer) { this.buffer = buffer; } @Override public void run() { for (int i = 1; i < 6; i++) { buffer.put(i); try { sleep(1); } catch (InterruptedException e) { e.printStackTrace(); } } }}class Receiver2 extends Thread{ private BufferLock buffer; public Receiver2(BufferLock buffer) { this.buffer = buffer; } @Override public void run() { for (int i = 1; i < 6; i++) { buffer.get(); try { sleep(1); } catch (InterruptedException e) { e.printStackTrace(); } } }} 支持1楼。之所以出现楼主说的问题,是因为楼主将“打印动作”放到了两个线程中,而“打印动作”又不在同步块中。实际上对BufferLock的同步操作是没有问题的。 各位高手指教!! JAVA 基础问题,在线等,有答案立刻结贴。 高智商进来看看 ======关于带包路径的JAVA程序调用C程序的问题====== 帮忙看个源代码! 俺是初学java的,用什么工具比较好啊? 一个Java运行时的问题,(小问题) 一个Thinking in Java 的例程仿写,有错误但百思不得其解,高分悬赏中! 我是新手,请来看看吧! jaxp怎么连空格也当成一个节点啊??????很烦啊!!!!!!!! QQ聊天室,关于socket编程 一个面试题
{
private int value;
private boolean isEmpty = true;
public synchronized void put(int i)
{
while (!isEmpty)
{// 当value不空时,等待
try
{
this.wait();
}
catch (InterruptedException e)
{
e.printStackTrace();
}
}
this.value = i;
System.out.println("Sender put" + i);
isEmpty = false;
notify();
}
public synchronized int get()
{
while (isEmpty)
{// 当value为空时,等待
try
{
this.wait();
}
catch (InterruptedException e)
{
e.printStackTrace();
}
}
isEmpty = true;
System.out.println("\t\t Receiver get: " + value);
notify();
return value;
}
public static void main(String[] args)
{
BufferLock buffer = new BufferLock();
(new Sender2(buffer)).start();
(new Receiver2(buffer)).start();
}
}class Sender2 extends Thread
{
private BufferLock buffer;
public Sender2(BufferLock buffer)
{
this.buffer = buffer;
}
@Override
public void run()
{
for (int i = 1; i < 6; i++)
{
buffer.put(i);
try
{
sleep(1);
}
catch (InterruptedException e)
{
e.printStackTrace();
}
}
}
}class Receiver2 extends Thread
{
private BufferLock buffer;
public Receiver2(BufferLock buffer)
{
this.buffer = buffer;
}
@Override
public void run()
{
for (int i = 1; i < 6; i++)
{
buffer.get();
try
{
sleep(1);
}
catch (InterruptedException e)
{
e.printStackTrace();
}
}
}
}
实际上对BufferLock的同步操作是没有问题的。