Tag: multithreading

什么是java中的类级锁

什么是类级锁。 你能用一个例子来解释一下吗?

JVM如何终止守护程序线程? 或者如何编写优雅终止的守护程序线程

假设情景: 我有一个守护程序线程负责一些I / O,主线程完成并返回,JVM决定终止我的守护程序线程。 它是如何做到的? 打断? 最终确定? 如何编写我的守护程序线程,以便它在终止时能够做出优雅的反应?

如何包装方法,以便在超过指定的超时时可以终止执行?

我有一个方法,我想打电话。 但是,我正在寻找一种干净,简单的方法来杀死它或强迫它返回,如果执行时间太长。 我正在使用Java。 为了显示: logger.info(“sequentially executing all batches…”); for (TestExecutor executor : builder.getExecutors()) { logger.info(“executing batch…”); executor.execute(); } 我认为TestExecutor类应该implement Callable并继续朝这个方向发展。 但我想要做的就是停止executor.execute()如果它花了太长时间。 建议…? 编辑 收到的许多建议都假设正在执行的方法需要很长时间才能包含某种循环,并且可以定期检查变量。 然而,这种情况并非如此。 因此,某些东西不一定是干净的,只会停止执行,这是可以接受的。

为什么java安全管理器不禁止创建新的Thread()也不禁止它?

你碰巧知道解释为什么java安全管理器不禁止创建新线程或启动它们吗? 新的FileWriter在安全管理器下,但新的Thread()和threadInstance.start()都不是更安全的安全管理器,并且可以调用。 禁止它会不会有用吗? 难以实施吗? 或者创建和启动新线程并不是那么禁止它?

按顺序运行Java线程

你将如何顺序执行三个线程? 例如。 Thread1,Thread2,Thread3。 无法将一个Thread的引用传递给另一个并从run()方法调用。 所以代码应该是这样的: Thread1.start(); Thread2.start(); Thread3.start(); 应该是 Printing Thread1 Printing Thread2 Printing Thread3 这可以通过使用ThreadPoolExecutor并使用阻塞队列来实现,但即便这样也不是可接受的答案。

使用多个线程编写文件

我试图使用多个线程在Java中编写一个巨大的文件。 我在Java中尝试过FileWriter和bufferedWriter类。 正在编写的内容实际上是使用CopyManager读取并写入的整个表(Postgres)。 文件中的每一行都是表格中的一个元组,我一次写入100行。 写作方法: 在附加模式下,多个线程打开单个待写文件。 之后每个线程都尝试写入文件文件。 以下是我面临的问题: 有一段时间,文件的内容会被覆盖,即:一行保持不完整,下一行从那里开始。 我的假设是写入器的缓冲区已满。 这会强制编写器立即将数据写入文件。 写入的数据可能不是一个完整的行,在它可以写入余数之前,下一个线程将其内容写入文件。 使用Filewriter ,我会在文件中看到一条黑线。 有什么建议,如何避免这种数据完整性问题?

如何使用invokeAll()让所有线程池完成他们的任务?

ExecutorService pool=Executors.newFixedThreadPool(7); List<Future> future=new ArrayList<Future>(); List<Callable> callList = new ArrayList<Callable>(); for(int i=0;i<=diff;i++){ String str="2013-"+(liDates.get(i).get(Calendar.MONTH)+1)+"-"+liDates.get(i).get(Calendar.DATE); callList.add(new HotelCheapestFare(str)); } future=pool.invokeAll(callList); for(int i=0;i<=future.size();i++){ System.out.println("name is:"+future.get(i).get().getName()); } 现在我希望pool在进入for循环之前invokeAll所有的任务但是当我运行这个程序for循环时,在invokeAll之前执行并抛出此exception: java.util.concurrent.ExecutionException: java.lang.NullPointerException at java.util.concurrent.FutureTask$Sync.innerGet(Unknown Source) at java.util.concurrent.FutureTask.get(Unknown Source) at com.mmt.freedom.cheapestfare.TestHotel.main(TestHotel.java:6‌​5) Caused by: java.lang.NullPointerException at com.mmt.freedom.cheapestfare.HotelCheapestFare.getHotelCheap‌estFare(HotelCheapes‌​tFare.java:166) at com.mmt.freedom.cheapestfare.HotelCheapestFare.call(HotelChe‌​apestFare.java:219) at com.mmt.freedom.cheapestfare.HotelCheapestFare.call(HotelChe‌​apestFare.java:1) at java.util.concurrent.FutureTask$Sync.innerRun(Unknown Source) at java.util.concurrent.FutureTask.run(Unknown Source) at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) atjava.util.concurrent.ThreadPoolExecutor$Worker.run(Unknow‌​n Source) at […]

如何让另一个线程在Java中hibernate

我有一个扩展Thread的类。 这个线程在运行时花费大部分时间睡觉,它将执行检查,如果为true则执行简单操作,然后hibernate1/2秒并重复。 该类还有一个由其他线程调用的公共方法。 如果调用它,我希望线程在睡眠时睡眠时间更长或者如果不是则立即睡觉。 我试图让这个.sleep,但似乎这仍然睡在当前线程,它抱怨方法睡眠是静态的,应该静态访问。 这个程序显示我的问题,当调用CauseSleep时我想让它停止打印数字,直到睡眠结束。 public class Sleeper { public static void main(String[] args) { new Sleeper(); } public Sleeper() { System.out.println(“Creating T”); T t = new T(); System.out.println(“Causing sleep”); t.CauseSleep(); System.out.println(“Sleep caused”); } public class T extends Thread { public T() { this.start(); } public void run() { for (int i = 0; […]

Java volatile修饰符和synchronized块

多个线程访问但仅在同步块内部的变量是否需要volatile修饰符? 如果没有,为什么?

事件派发线程如何工作?

在stackoverflow上的人的帮助下,我能够获得以下简单GUI倒计时的工作代码(它只显示一个倒数秒的窗口)。 我对这段代码的主要问题是invokeLater东西。 据我了解invokeLater ,它向事件调度线程(EDT)发送任务,然后EDT在“可以”(无论这意味着什么)时执行此任务。 是对的吗? 根据我的理解,代码的工作原理如下: 在main方法中,我们使用invokeLater来显示窗口( showGUI方法)。 换句话说,显示窗口的代码将在EDT中执行。 在main方法中,我们也启动counter ,并且计数器(通过构造)在另一个线程中执行(因此它不在事件调度线程中)。 对? counter在一个单独的线程中执行,并定期调用updateGUI 。 updateGUI应该更新GUI。 GUI正在EDT中运行。 因此, updateGUI也应该在EDT中执行。 这就是为什么updateGUI的代码包含在invokeLater 。 是对的吗? 我不清楚的是为什么我们从美国东部时间拨打电话。 无论如何,它不是在EDT中执行的。 它立即启动,一个新线程和counter在那里执行。 那么, 为什么我们不能在invokeLater块之后调用main方法中的counter呢? import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.SwingUtilities; public class CountdownNew { static JLabel label; // Method which defines the appearance of the window. public static void showGUI() { JFrame frame […]