gpt4 book ai didi

java网络多线程

转载 作者:行者123 更新时间:2023-11-30 09:44:20 26 4
gpt4 key购买 nike

我正在尝试构建一个可以同时接受来自多个客户端的文件的服务器。

但它是顺序提交文件,我不明白为什么....

有人可以帮忙吗?谢谢

我发布了两个线程的片段。每次我接受连接时,我都会实例化提交类并执行它们。

This is main thread that accepts connections
int poolSize = 1;
int maxPoolSize = 3;
long keepAliveTime = 10;
ArrayBlockingQueue<Runnable> queue = new ArrayBlockingQueue<Runnable>(5);
threadPool = new ThreadPoolExecutor(poolSize, maxPoolSize, keepAliveTime, TimeUnit.SECONDS, queue);

最佳答案

Submission 类的 run() 方法中的锁导致您的代码部分按顺序运行。该锁是通过构造函数传入的,因此它在您所有的 child 之间共享,因此他们都在运行 stats.logSubmission 之前调用 lock.lock()。这意味着一次只有一个线程将调用 logSubmission。

作为获得并发的快速方法;尝试移除锁而不是立即写入文件,尝试将日志记录存储在 ConcurrentLinkedQueue 中.然后,您可以在稍后执行时或在某些条件(大小、时间等)下将它们刷新到磁盘。该队列是无锁的、快速的和线程安全的。

关于java网络多线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7949183/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com