Tag: multithreading

CPU密集计算示例?

我需要一些易于实现的单CPU和内存密集型计算,我可以在java中为测试线程调度程序编写。 它们应该耗费一些时间,但更重要的是消耗资源。 有任何想法吗?

java.io.StreamCorruptedException:类型代码无效:00

所以基本上我正在写一个客户端 – 服务器多人游戏。 我有一个SeverCommunicationThread,如果他收到RequestForGame就会创建一个gameThread来创建gameThread。 当我发送一个RequestForGameexception时抛出java.io.StreamCorruptedException:无效的类型代码:00我假设它是因为两个线程都试图读取相同的ObjectInputStream,我对它的工作方式我不太了解,我只知道如何使用它。 你能帮我理解问题是什么以及如何解决? 谢谢 :) public class ServerCommunicationThread extends Thread{ private Socket connectionSocket; private ObjectInputStream inFromClient; private ObjectOutputStream outToClient; private String nickname; private ServerModelManager model; public ServerCommunicationThread(Socket connectionSocket, ServerModelManager model) throws IOException { this.connectionSocket = connectionSocket; inFromClient = new ObjectInputStream(connectionSocket.getInputStream()); outToClient = new ObjectOutputStream(connectionSocket.getOutputStream()); this.model = model; start(); } public void run() […]

在java中创建线程以在后台运行

我想从我的主java程序中生成一个Java线程,该线程应该单独执行而不会干扰主程序。 这是应该如何: 主程序由用户发起 有些业务是否有效,应该创建一个可以处理后台进程的新线程 一旦创建了线程,主程序就不应该等到生成的线程完成。 事实上它应该是无缝的..

multithreading套接字通信客户/服务器

我写完了一个工作正常的Client / Server Socket通信程序。 现在我想弄清楚如何制作它,以便我可以同时与服务器建立多个客户端连接。 我环顾四周,似乎有不止两种不同的方式来做到这一点。 所以我来这里向你们寻求帮助/建议。 我的服务器: public class Server { private ServerSocket serverSocket = null; private Socket clientSocket = null; public Server() { try { serverSocket = new ServerSocket(7003); } catch (IOException e) { System.err.println(“Could not listen on port: 7003”); System.exit(1); } try { clientSocket = serverSocket.accept(); } catch (IOException e) { System.err.println(“Accept […]

为什么并行流不使用ForkJoinPool的所有线程?

所以我知道如果你在没有自定义ForkJoinPool的情况下使用parallelStream ,它将使用默认的ForkJoinPool,默认情况下,只有少一个线程,因为你有处理器。 因此,如此处所述 (以及该问题的另一个答案)为了获得更多的并行性,您必须: 将并行流执行提交给您自己的ForkJoinPool:yourFJP.submit(() – > stream.parallel()。forEach(doSomething)); 所以,我这样做了: import java.util.Set; import java.util.concurrent.ExecutionException; import java.util.concurrent.ForkJoinPool; import java.util.stream.IntStream; import com.google.common.collect.Sets; public class Main { public static void main(String[] args) throws InterruptedException, ExecutionException { ForkJoinPool forkJoinPool = new ForkJoinPool(1000); IntStream stream = IntStream.range(0, 999999); final Set thNames = Collections.synchronizedSet(new HashSet()); forkJoinPool.submit(() -> { stream.parallel().forEach(n -> { System.out.println(“Processing […]

使用TaskExecutor示例的任何好的Spring线程?

我试图了解如何在使用Spring进行事务管理的Java应用程序中实现线程。 我在Spring文档中找到了TaskExecutor部分,而ThreadPoolTask​​Executor看起来很符合我的需求; ThreadPoolTask​​Executor类 此实现只能在Java 5环境中使用,但也是该环境中最常用的实现。 它公开了bean属性,用于配置java.util.concurrent.ThreadPoolExecutor并将其包装在TaskExecutor中。 如果您需要一些高级的东西,例如ScheduledThreadPoolExecutor,建议您使用ConcurrentTaskExecutor。 但是我不知道如何使用它。 我一直在寻找好的例子现在没有运气。 如果有人可以帮助我,我会很感激。

为什么java.util.concurrent.ArrayBlockingQueue使用’while’循环而不是’if’来调用await()?

我一直在玩我自己的版本,使用’if’,似乎一切正常。 当然,如果使用signalAll()而不是signal(),这将会崩溃,但如果一次只通知一个线程,那怎么会出错呢? 他们的代码在这里 – 检查put()和take()方法; 可以在JavaDoc for Condition的顶部看到更简单,更多点的实现。 我的实施的相关部分如下。 public Object get() { lock.lock(); try { if( items.size() = capacity ) hasSpace.await(); items.addFirst(item); hasItems.signal(); return; } catch (InterruptedException e) { e.printStackTrace(); } finally { lock.unlock(); } } PS我知道,一般来说,特别是在像这样的lib类中,应该让exception渗透。

java使用线程下载多个文件

我正在尝试使用线程下载与模式匹配的多个文件。 该模式可以匹配1或5或10个差异大小的文件。 为简单起见,我们可以说下载文件的实际代码是downloadFile()方法,而fileNames是与模式匹配的文件名列表。 我如何使用线程执行此操作。 每个线程只下载一个文件。 是否可以在for循环中创建一个新线程。 for (String name : fileNames){ downloadFile(name, toPath); }

设置线程池的理想大小

有什么区别 – newSingleThreadExecutor vs newFixedThreadPool(20) 从操作系统和编程的角度来看。 每当我使用newSingleThreadExecutor运行程序时,我的程序运行良好,端到端延迟(第95百分位数)大约需要5ms 。 但是一旦我开始运行我的程序 – newFixedThreadPool(20) 我的程序性能下降,我开始看到端到端延迟为37ms 。 所以现在我试图从架构的角度来理解这里有多少线程意味着什么? 以及如何确定我应该选择的最佳线程数? 如果我使用更多的线程,那会发生什么? 如果有人能用外行语言向我解释这些简单的事情那么这对我来说非常有用。 谢谢您的帮助。 我的机器配置规范 – 我正在从Linux机器运行我的程序 – processor : 0 vendor_id : GenuineIntel cpu family : 6 model : 45 model name : Intel(R) Xeon(R) CPU E5-2670 0 @ 2.60GHz stepping : 7 cpu MHz : 2599.999 cache size : […]

为什么Thread.isInterrupted()总是返回false?

我找到了JavaDoc的方法: 返回:如果此线程已被中断,则返回true; 否则是假的。 我认为我对该方法的理解有些不对劲。 此外,我可能会误解Thread中的“中断”概念。 欢迎任何解释! 谢谢! 代码段: 在线程定义中: public void run() { try { //Do something } catch (InterruptedException e) { System.out.println(isInterrupted());//Always false return; } } 引用: theThread.interrupt();