我可以问一个新手Java问题吗?
我正在从网上下载一些文件。此方法下载(url位置)被多次调用。
public static void download(final String url) {
Thread t = new Thread("download") {
@Override
public void run() {
try {
synchronized (object) {
// download & save
}
} catch(Exception e) {}
}
};
t.start();
}
我添加了“同步”,这样下载就会一个接一个地发生。(不是同时发生多个下载)。
我猜即使下载()被多次调用,同步也会阻塞其他线程,直到第一个线程完成。
上面的代码会起作用吗?还是我必须实现队列?并逐个取消排队?
同步可以阻止“足够”的线程吗?(30? 50?)还是有限制?
如果可以避免创建额外的线程,通常应该这样做。据我所知,您永远不希望两个工作项(下载)并行,因此从性能角度来看,最好的方法是使用由单个工作线程轮询的并发队列实现。
上面的代码会起作用吗?
是的,只要< code>object在所有线程中引用同一个对象,synchronized块中的代码一次只会被一个线程执行。
[…]还是我必须实现队列?然后一个接一个地排队?
一般来说,我会建议您尽可能使用高级结构(例如来自java.util.concurrent包)。例如,您可以考虑为这些类型的事情使用executor服务。
[…]同步可以阻止“足够”的线程吗?(30?50?)还是有限制?
不,没有限制。至少不接近30或50:-)
操作方法如下:
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
public class QueueDownloader {
private final ExecutorService executor = Executors.newSingleThreadExecutor();
public void download(final String url) {
executor.execute(new Runnable() {
@Override
public void run() {
// download & save
}
});
}
}
这将在单个后台线程上对所有可运行程序(即下载)进行排队。
我有两个线程用于在线游戏制作。一个线程接收两个 X 和 Y 数字,另一个线程将 X 和 Y 数字发送给登录到服务器的每个人。基本上,我需要一个队列,这将允许第一个线程将2D数组添加到队列中,并继续这样做,同时,将数组拉出并从队列中删除数组以用于发送给其他玩家。有没有办法做到这一点?我知道我需要一个同步的队列,但是我如何同步一个,这被称为阻塞队列吗? 总的来说,我需要一个同步的队列,这将允许两个线程
我一直在做一个需要同步队列的项目,因为我的程序是多线程的,线程可能会访问这个队列。我使用arraylist来实现这一点,但我似乎遇到了一些问题,线程陷入僵局。我不知道排队是否是原因,但我只是想检查一下: 编辑:即使使用LinkedBlockingQueue,我也会陷入与之前相同的循环中。我认为这是因为有一个线程正在等待队列被填充,但它从来没有这样做,因为其他功能已经完成运行…有什么想法吗???
问题内容: Linux中有等待队列为FIFO的锁吗?这似乎是一件显而易见的事情,但是我刚刚发现pthread互斥锁不是FIFO,信号量显然也不是FIFO(我正在研究内核2.4(家庭作业))… Linux是否具有带有FIFO等待队列的锁,或者是否有简单的方法可以利用现有机制来建立锁? 问题答案: 这是创建基于pthreads原语的简单排队“票证锁”的方法。它应该给您一些想法:
我正在尝试使用Servlets(resteasy+Hibernate)实现一个约会队列。我的约会控制器如下(当然是简化的)。 目前这种方法工作良好。但我读过关于BlockingQueue实现的文章,哪种方法似乎是正确的? 工作细节的定义: 如果不使用同步静态并同时发送多个请求,则多个约会具有相同的约会编号 但如果使用同步静态,则以正确顺序创建的约会 我需要澄清的是; -这是正确的方法吗? -在我的
我试图在artemis上做几个样本,下面的问题的任何帮助都是伟大的更好的系统设计。 > 如果我们选择通过CLI/Web控制台选项创建队列,那么存储在绑定日志中的队列信息是否会因为我看不到代理xml得到更新?如果是这样的话,broker实例在引导时加载broker.xml中存在的所有地址以及通过CLI创建的地址?如有理解,请更正。我希望有自动创建队列的方式,并寻找最佳选择,而无需重新启动服务器。 我
主要内容:1 ConcurrentLinkedQueue的概述,2 ConcurrentLinkedQueue的实现,2.1 基本结构,2.2 构造器,2.3 入队操作,2.4 出队操作,2.5 过程详解,2.6 获取操作,2.7 其他操作,3 ConcurrentLinkedQueue的总结基于JDK1.8详细介绍了ConcurrentLinkedQueue的底层源码实现,包括同步原理、入队操作、出队操作、获取操作等。 1 ConcurrentLinkedQueue的概述 public cla