tip*_*ipu 1 java multithreading synchronization
我在理论上理解线程,但我不知道如何在Java中实现它们.

圆圈应该是线程,矩形应该是缓冲区.
我有这个全部编码,但它不起作用,所以我开始新的.我的困惑之源来自于我需要这个循环重复多次并按此顺序,但我无法预测首先运行什么线程.如果依赖A的数据的线程B首先运行,会发生什么?
另外我如何让线程无限期地运行?
您可以使用阻止队列作为缓冲区.当队列为空时,它们处理所有线程以等待其他线程.
基本上你将有两个类,每个线程一个.所以,你会有这样的事情.
class PageToRetriveQueue implements Runnable{
PageBuffer partner;
BlockingQeueue queue = new LinkedBlockingQueue<Page>();
public void run(){
while(true){
Page p = partner.queue.take();
for(Link l : p){
queue.offer(l);
}
}
}
}
class PageBuffer implements Runnable{
PageToRetriveQueue partner;
BlockingQeueue queue = new LinkedBlockingQueue<Link>();
public void run(){
while(true){
Link l = partner.queue.take();
Page p = downloadPage(l);
queue.offer(p);
}
}
}
Run Code Online (Sandbox Code Playgroud)
您必须实现Page,Link和downloadPage功能.当你开始时,你必须播种其中一个队列才能开始,可能是链接队列.直接调用partner.queue.take()是风格上不好的形式,而不是你有一个抽象的函数.我正在尝试使代码简洁易懂.
希望有所帮助!