Tag: multithreading

Java中main()方法和主线程之间的关系是什么?

我的导师告诉我主线程是每个线程的父线程,但他无法解释原因。 当我写一个简单的程序时: Class A{} 然后它在执行时抛出exception: java.lang.NoSuchMethodError: main Exception in thread “main” main()方法和主线程之间是否有任何关系?

对集合进行线程安全迭代

我们都知道在使用Collections.synchronizedXXX (例如synchronizedSet() )时,我们得到了底层集合的同步“视图”。 但是,这些包装器生成方法的文档指出,在使用迭代器迭代集合时,我们必须在集合上显式同步 。 您选择哪个选项来解决此问题? 我只能看到以下方法: 按照文档说明:对集合进行同步 在调用iterator()之前克隆集合 使用迭代器是线程安全的集合(我只知道CopyOnWriteArrayList / Set) 并且作为一个额外的问题:当使用同步视图时 – 使用foreach / Iterable线程安全吗?

在两个线程之间进行通信

我有一个post, A有一个列表。 List包含一些对象。 现在我想设计一个机制,通过它我可以向线程A发送一些消息。 Thread A在循环中运行(它不等待或hibernate)。 其他一些线程B向线程A发送一些消息,线程A清空所有队列。 如何在线程之间发送消息? class A extends Thread { List objs = something; //Init it void run() { while(true) { //Body which works on objects. //After receiving an external message, “A” should perform some action, for example, empty objects. } } } 编辑:我可以这样做吗? class A extends Thread { List objs = […]

Java中有epoll等价吗?

Java中有相同的Linux epoll吗? epoll允许线程对许多异类事件做出反应。 例如,我可以有一个线程响应套接字事件或来自控制台的输入。 在C ++中,我可以通过使用epoll注册stdio和套接字来实现这一点。 我的线程将由来自其中任何一个的事件触发。 Java中有类似的设施吗? 我看了一下nio包,它允许我用一个选择器注册一些套接字。 但似乎没有用选择器注册控制台/标准io。 我没有看到什么? 还有另一种方法吗? 关于“为什么”:我想编写一个通过套接字进行通信的程序,我想通过从控制台输入命令来驱动该程序。 我知道如何通过将控制台输入和通信分离到不同的线程来实现这一点,但我很好奇是否有办法在单个线程中执行此操作。 谢谢。 DF

如何从Java中的另一个线程更新SWT GUI

我正在使用SWT编写桌面应用程序。 从另一个线程更新GUI控件的最简单方法是什么?

如何在服务器模式下将OpenOffice用作multithreading服务?

在服务器模式下使用OpenOffice有什么经验? 我知道OpenOffice不是multithreading的,现在我需要在我们的服务器中使用它的服务。 我该怎么做才能克服这个问题? 我正在使用Java。

在webapp中正常关闭ExecutorService?

在我的webapp中,我创建了一个使用具有固定大小ThreadPool的ExecutorService的服务。 我在整个应用程序生命周期中重用了相同的ExecutorService 。 private static ExecutorService pool = Executors.newFixedThreadPool(8); 所有都在Tomcat中运行,它在向下发出错误时给出了以下错误: appears to have started a thread named [pool-1-thread-1] but has failed to stop it. This is very likely to create a memory leak. 我确实意识到我需要在关闭tomcat之前关闭ExecutorService。 Soms SO线程已经谈到了这一点,但我找不到一个干净的方法来处理这个问题。 我是否应该按照Tim-bender的建议使用ShutdownHook来正常关闭线程和执行程序 ? 或者我应该使用CachedThreadPool吗?

处理发生时动态刷新JTextArea?

我正在尝试创建一个非常简单的Swing UI,通过JTextArea将信息记录到屏幕上,因为处理在后台进行。 当用户点击按钮时,我希望每次调用: textArea.append(someString + “\n”); 立即显示在用户界面中。 目前,在单击按钮后处理完成之前,JTextArea不会显示所有日志信息。 我怎样才能让它动态刷新?

如何找到父线程的名称?

我知道当我们谈论流程时,我们可以拥有“父母”和“孩子”。 但是有可能获得父Thread名称吗? 我做了我的研究,但我只找到了.Net的答案 编辑:我尝试设置名称: public class Main { public static void main(String[] args) { Thread r = new ThreadA(); r.start(); } } public class ThreadA extends Thread { public void run() { Thread.currentThread().setName(“Thread A”); System.out.println(“Here ” + Thread.currentThread().getName()); Thread r = new ThreadB(); r.setName(Thread.currentThread().getName()); r.start(); } } public class ThreadB extends Thread { public void […]

Java线程:等待并通知方法

我有一个调用wait方法的线程,只能在从其他类调用notify方法时唤醒: class ThreadA { public static void main(String [] args) { ThreadB b = new ThreadB(); b.start(); synchronized(b) { try { System.out.println(“Waiting for b to complete…”); b.wait(); } catch (InterruptedException e) {} System.out.println(“Total is: ” + b.total); } } } class ThreadB extends Thread { int total; public void run() { synchronized(this) { for(int i=0;i<100;i++) […]