Tag: multithreading

按顺序java运行3个线程

我有3个线程第1次打印第2次打印B第3次打印C. 我想按顺序打印ABCABCABC等等…… 所以我在下面编写了这个程序,但我无法实现同样的目标。 我知道当status = 1时,例如B1和C1线程正在等待,当我执行notifyAll()时,两个等待线程都被唤醒,并且根据CPU分配,它可能会打印B或C. 在这种情况下,我只想在A之后打印B. 我需要做什么修改。 public class NotifyAllExample { int status=1; public static void main(String[] args) { NotifyAllExample notifyAllExample = new NotifyAllExample(); A1 a=new A1(notifyAllExample); B1 b=new B1(notifyAllExample); C1 c=new C1(notifyAllExample); a.start(); b.start(); c.start(); } } class A1 extends Thread{ NotifyAllExample notifyAllExample; A1(NotifyAllExample notifyAllExample){ this.notifyAllExample = notifyAllExample; } @Override public void run() […]

限制javafx gui更新

我随机地以高频率接收数据对象,并且需要使用这些来更新JavaFX GUI。 但是,我不想用大量的runnable填充javafx事件队列(我使用Platform.RunLater)。 我一直在考虑如何最好地实现限制算法。 是否最好有一个单独的GUIUpdater线程来检查例如新对象的阻塞队列,然后睡眠例如30ms然后再次检查,在无限循环中? 在这种情况下,阻塞队列是否是最佳数据结构? 请注意我只需要最新的数据对象,blockingQueue是一个FIFO队列,我似乎无法选择最新的条目。 或者 – 如果nanoTime-startTime> 30ms,只需用Platform.RunLater更新GUI会更好吗? 在这种情况下,我不需要单独的线程来执行Platform.RunLater调用。 但是 – 如果在30ms未通过时收到更新,然后在一段时间内未收到任何更新,则最后一次更新将不会显示在GUI中。 有关如何以简短有效的方式为JavaFX Platform.RunLater GUI更新设计限制算法的任何建议吗?

防止在后台任务期间锁定Swing GUI

我有一个swing应用程序,它存储一个对象列表。 当用户点击按钮时 我想对列表中的每个对象执行两个操作,然后在完成后,将结果绘制在JPanel中。 我一直在尝试使用SwingWorker,Callable和Runnable进行处理,但无论我做什么,在处理列表时(可能需要几分钟,因为它是IO绑定的),GUI被锁定。 我有一种感觉,这可能是我调用线程或其他东西的方式,还是可能与图形函数有关? 这不是线程,因为它非常快。 我必须按顺序完成两个处理阶段,那么确保第二个阶段在第一个阶段等待的最佳方法是什么? 我已经使用了join(),然后 while(x.isAlive()) { Thread.sleep(1000); } 试图确保这一点,但我担心这也可能是我的问题的原因。 我一直在寻找一些指针,但由于我找不到任何东西,我确信我在这里做了些蠢事。

使用Gridbag布局时的动画。

我最近开始使用Java,并想知道在使用GridBag Layout时是否可以制作动画。 这些可能吗?如何? 任何教程,帮助等都将非常感谢:)

向所有客户端发送消息(客户端 – 服务器通信)

所以现在,我正在制作一个基于multithreading的客户端服务器应用程序。 在服务器端,我为接受的单独连接创建了一个线程。 在线程类中,我创建了一个向客户端发送命令的方法。 我只想要的是,如何向所有正在运行的客户端发送参数? 对于简单的声明,我只想让这个服务器向所有连接的客户端发送消息。 我已阅读此帖并从此链接中找到sendToAll(String message)方法。 但是当我尝试使用我的代码时,在ServerSocket没有类似的方法。 好的,这是我的服务器和线程的示例代码。 class ServerOne{ ServerSocket server = null; … ServerOne(int port){ System.out.println(“Starting server on port “+port); try{ server = new ServerSocket(port); System.out.println(“Server started successfully and now waiting for client”); } catch (IOException e) { System.out.println(“Could not listen on port “+port); System.exit(-1); } } public void listenSocket(){ while(true){ ClientWorker […]

我的java线程需要多少内存?

有没有办法找出我的java线程在VM中占用多少内存? 例如,使用堆栈跟踪转储或其他一些方法。 谢谢

Java中的构造函数同步

有人告诉我,Java构造函数是同步的,因此在构造期间无法同时访问它,我想知道:如果我有一个构造函数将对象存储在一个映射中,另一个线程在构造之前从该映射中检索它完成后,该线程会阻塞直到构造函数完成吗? 让我演示一些代码: public class Test { private static final Map testsById = Collections.synchronizedMap(new HashMap()); private static final AtomicInteger atomicIdGenerator = new AtomicInteger(); private final int id; public Test() { this.id = atomicIdGenerator.getAndIncrement(); testsById.put(this.id, this); // Some lengthy operation to fully initialize this object } public static Test getTestById(int id) { return testsById.get(id); } } 假设put […]

基于no的线程配置。 CPU核心

场景:我有一个示例应用程序,我有3种不同的系统配置 – – 2 core processor, 2 GB RAM, 60 GB HHD, – 4 core processor, 4 GB RAM, 80 GB HHD, – 8 core processor, 8 GB RAM, 120 GB HHD 为了有效地利用我的应用程序的H / Wfunction,我希望配置no。 应用程序级别的线程数。 但是,我希望在彻底了解系统function之后才能这样做。 是否有某种方式(系统/模式/工具)来参考最大值和最小值来确定系统实力。 它可以最佳地服务并且不会降低效率和性能。 通过这种方式,我只能为我的应用程序配置那些能够完全正义并为各自的硬件配置实现最佳性能的值。 Edited1:任何人都可以建议任何关于如何为特定h / w配置设置基线的读数。 编辑2:使其更直接 – 希望学习/了解我可以阅读的任何资源/文章,以便在一般/整体层面上了解线程的CPU管理。

Jboss Java EE容器和ExecutorService

我有一个独立的Java应用程序,它使用ExecutorService并行处理大量作业 ExecutorService es = Executors.newFixedThreadPool(10); 我现在想在EJB bean中重用相同的解决方案但不确定如何正确初始化ThreadPool,因为我通常会让Java EE容器控制所有线程资源。 我可以使用相同的代码,还是有另一种正确的方法来获取Jboss托管线程池?

在自己的构造函数中调用thread.start()

一个线程在它自己的构造函数中调用this.start()是否合法? 如果是这样,这会导致什么潜在问题? 我知道该对象在构造函数运行完成之前不会完全初始化,但除此之外还有其他问题吗?