草庐IT

Tread多线程

全部标签

java - 当 JVM 停止线程时,为 java 用户线程调用清理方法

我有在Linux上运行的J2SE应用程序。我已经停止应用程序脚本,我正在其中杀死J2SEpid。这个J2SE应用程序有6个无限运行的用户线程,它们将轮询后端数据库中的一些特定记录。当这个javapid被杀死时,我需要为每个长时间运行的线程执行一些清理操作,比如连接到数据库并将一些正在进行的事务的状态设置为空。有没有办法在每个线程中编写一个方法,在线程将要停止时由JVM调用。 最佳答案 您始终可以尝试使用Runtime.addShutDownHook实现关闭Hook,或者将长时间运行的代码封装在try中,将清理封装在finally中。

java - java.util.Vector 序列化线程安全吗?

我知道Vector类对于添加和删除元素是线程安全的[reference].如果我使用ObjectOutputStream序列化一个Vector,即使其他线程在序列化过程中添加和删除对象,我是否可以保证在反序列化时保持一致(且未损坏)的状态? 最佳答案 writeObject()方法是同步的。但是Javadoc中没有任何内容可以保证这一点,除非声明“vector是同步的”暗示了这一点。请注意,readObject()方法不需要同步,因为在readObject()返回之前,任何人都无法访问该对象。

java - 创建 Java 线程时的内存使用量

实例化和启动Java线程时(大致)分配了多少内存?这是一个代码示例://DefinitionofthethreadclassclassBasicThreadextendsThread{//Thismethodiscalledwhenthethreadrunspublicvoidrun(){}}...//CreateandstartthethreadThreadthread=newBasicThread();thread.start(); 最佳答案 好吧,线程(即对象)本身需要一些空间——它确实有十几个变量和对象(我懒得正确计算它们)

java - 将线程安全对象放在 ThreadLocal 上有什么好处吗?

我最近看到一段代码,它使用了一个ThreadLocal对象并在其中保存了一个ConcurrentHashMap。这有什么逻辑/好处,还是多余的? 最佳答案 如果对并发散列图的唯一引用驻留在ThreadLocal中,则散列图显然仅从单个线程引用。在这种情况下,我会说它是完全多余的。然而,不难想象有人与其他线程“共享”线程本地存储的HashMap:ThreadLocal>tl=...//...finalConcurrentHashMapprops=tl.get();EventQueue.invokeLater(newRunnable()

java - 两个线程在运行时如何通信?

我一直在尝试自学并发,但遇到了一个问题。我知道两个Java线程可以通过wait()和notify()相互通信。然而,这需要一个线程处于非Activity状态并且基本上“只是闲置”直到另一个线程将其唤醒。是否有可能让两个线程同时运行并且仍然让它们监听来自另一个线程的通知?这将通过并发技术或类似ActionListener的方式来实现吗?例如,我正在测试的项目基本上是一个网格,不同的实体在不同的单元格中四处游荡。当两个实体碰巧进入同一个单元格时,我希望一个实体通知另一个实体并基于此发生一些不同的事情(例如,问候语:“你好!”)。但就目前而言,对于等待/通知范例,其中一个线程/实体必须简单地

java - 如何通知另一个线程

我想知道如何通知另一个线程的最佳方式。比如我有一个后台线程:publicvoidStartBackgroundThread(){newThread(newRunnable(){@Overridepublicvoidrun(){//Dosomethingbig...//THENHOWTONOTIFYMAINTHREAD?}}).start();}当它完成时必须通知主线程?如果有人知道如何做到这一点的最佳方式,我将不胜感激! 最佳答案 典型的答案是BlockingQueue。BackgroundThread(通常称为Producer)和

java - 线程内线程的优先级

假设您有一个启动两个线程a和b的程序,并且b启动了另外十个线程。a获得了一半的可用“注意力”,而b及其线程共享另一半,还是它们均等?如果默认答案是后者,你怎么能实现前者呢?谢谢! 最佳答案 关于这个主题有很多不错的文档。其中之一是this.创建Java线程时,它会从创建它的线程继承其优先级。您还可以在线程创建后随时使用setPriority()修改线程的优先级。方法。线程优先级是介于MIN_PRIORITY之间的整数。和MAX_PRIORITY(Thread类中定义的常量)。整数越大,优先级越高。在任何给定时间,当多个线程准备好执行

java - 有没有办法让线程知道哪个线程中断了它?

有没有办法让线程知道哪个线程中断了它?例如:...if(isInterrupted()){//look-upthethreadthatinterruptedthis//actaccordingly}Thread没有显示任何内容。//========================编辑:这不是我正在寻找的消息或事件机制。但是,这看起来很原始。一种获取类类型、线程组或可能只是中断优先级的方法线程会携带一些信息来处理。典型的用途是系统关闭——打断它们让它们脱离它们的状态阻塞方法,我现在想不出其他方法了。 最佳答案 Isthereawayf

java - 如何保持线程执行直到异步线程返回回调

我的场景如下图所示这里的主线程是我的java应用程序。它打开一个WM线程来执行。WM处理任务执行。他需要调用任务号来执行。假设它包含任务T1,T2,T3T3依赖于T2,T2依赖于T1。WM首先调用RM执行T1的任务执行。T1可以在寻呼中响应,也可以在T1完成后响应。问题是如何等待T1完成然后开始T2的执行。当T1部分完成发送分页数据时如何通知WM。这是简单的场景,但在T1、T2、T3、T4的情况下。T3依赖于T1和T2。代码:publicclassTestAsyncimplementsTaskCallBack{publicstaticExecutorServiceexService=E

java - 使用 10 个线程处理一个数组

我正在努力提高我的Java技能,但有点不确定如何处理这个多线程应用程序。基本上,该程序读取一个文本文件并找到最大的数字。我在我的搜索算法中添加了一个for循环来创建10个线程,但我不确定它是否真的创建了10个线程。这个想法是为了缩短执行时间,或者至少这是我认为应该发生的事情。有没有办法检查我是否做对了以及执行时间是否确实有所改善?importjava.io.BufferedReader;importjava.io.FileReader;importjava.io.IOException;publicclassProcessDataFile{publicstaticvoidmain(St