Tag: multithreading

CompletableFuture的完成处理程序在哪个线程中执行?

我有一个关于CompletableFuture方法的问题: public CompletableFuture thenApply(Function fn) 事情是JavaDoc说的就是这样: 返回一个新的CompletionStage,当该阶段正常完成时,将使用此阶段的结果作为所提供函数的参数执行。 有关特殊完成的规则​​,请参阅CompletionStage文档。 线程怎么样? 这将在哪个线程中执行? 如果未来由线程池完成怎么办?

在swing中使用sleep()

public class TestFrame extends JFrame { public TestFrame() { setBounds(10, 10, 500, 500); setLocationRelativeTo(null); setDefaultCloseOperation(3); } public static void main(String[] args) throws InterruptedException { TestFrame tf = new TestFrame(); tf.add(new JButton(“test1”)); tf.setVisible(true); Thread.sleep(2000); tf.getContentPane().removeAll(); tf.add(new JButton(“test2”)); System.out.print(“Show test”); } } 我希望程序在2秒后显示JButton(“test2”) 。 然后我在test1之后添加thread.sleep(2000) 。 但我不知道为什么程序停止显示test1 JButton ,没有显示test2 JButton并且“show test”消息可以成功打印出来

在线程之间传递信息的最佳方法是什么?

我希望在我的程序正在执行其他操作时收听服务器,当我从服务器收到要解释的消息时。 我知道线程但不完全确定它是如何工作的。 如果我有一个线程监听服务器,我如何将该数据传递给主线程进行解释? 主线程将数据发送到服务器的最佳方法是什么? synchronized修饰符有什么用?

生成Java线程转储而不重新启动。

我想创建一个跟踪内存使用和CPU使用情况的线程。 如果应用程序达到高级别,我想生成堆转储或线程转储。 有没有办法生成线程转储运行时而不重新启动?

为什么这个同步方法不能按预期工作?

我有一个名为“帐户”的课程 public class Account { public double balance = 1500; public synchronized double withDrawFromPrivateBalance(double a) { balance -= a; return balance; } } 还有一个名为ATMThread的类 public class ATMThread extends Thread { double localBalance = 0; Account myTargetAccount; public ATMThread(Account a) { this.myTargetAccount = a; } public void run() { find(); } private synchronized void find() { […]

是否在32位机器上使用Javaprimefaces进行64位分配?

如果我有这样的代码 – long x; x = 0xFFFFFFFFL; 如果我在32位机器上运行此代码,它是否保证是primefaces的,或者可能是读取x的不同线程可能得到不完整/垃圾值?

如何重新启动死线程?

将死线程恢复到可运行状态的所有不同可能性是什么。

使用JavaFX Platform.runLater并从不同的线程访问UI

我有一些关于Platform.runLater问题。 我有一个JavaFX Application类。 在这个类中,我运行一个线程(该线程从网络套接字读取数据)。 现在当我在线程中创建一个新的Stage ,系统会抛出一个execption(JavaFX事件调度程序线程和我的netork-read线程不一样) – 我理解这种行为。 但另一方面是,我将文本从网络阅读器附加到现有的TextArea或添加/删除ListView中的一些项目 – 这不会引发exception – 为什么? 我认为JavaFX是单线程的(ui库部分)。 这与Swing中的相同:有时它有效,有时你只有垃圾(因为EDT)? 我的问题: JavaFX事件调度程序线程何时抛出exception,何时抛出exception? 有关于此的任何好文件吗? 是否有更简单(更简洁和更清晰)的方式将Platform.runLater与run()方法一起使用? 结合try catch(或多次捕获),它看起来很奇怪 我知道在一个线程中使用Platform.runLater并不是那么好(设计解决方案)

RestTemplate应该是全局声明的静态吗?

我在我的代码中使用Java Callable Future。 下面是我使用未来和callables的主要代码 – public class TimeoutThread { public static void main(String[] args) throws Exception { ExecutorService executor = Executors.newFixedThreadPool(5); Future future = executor.submit(new Task()); try { System.out.println(“Started..”); System.out.println(future.get(3, TimeUnit.SECONDS)); System.out.println(“Finished!”); } catch (TimeoutException e) { System.out.println(“Terminated!”); } executor.shutdownNow(); } } 下面是我的Task类,它实现了Callable接口,我需要根据我们拥有的主机名生成URL,然后使用RestTemplate调用SERVERS。 如果第一个主机名中有任何exception,那么我将为另一个主机名生成URL,我将尝试拨打电话。 class Task implements Callable { private static RestTemplate restTemplate = new […]

Java执行官:如何停止提交的任务?

我已经使用执行程序提交了一个任务,我需要它在一段时间后停止(例如5分钟)。 我试过这样做: for (Future fut : e.invokeAll(tasks, 300, TimeUnit.SECONDS)) { try { fut.get(); } catch (CancellationException ex) { fut.cancel(true); tasks.clear(); } catch(ExecutionException ex){ ex.printStackTrace(); //FIXME: gestita con printstack } } 但我总是得到一个错误:我有一个需要被任务修改然后由线程读取的共享Vector,即使我停止所有任务,如果发生超时,我得到: Exception in thread “Thread-1” java.util.ConcurrentModificationException 有什么不对? 如何停止提交的5分钟后仍在工作的任务?