Tag: multithreading

在Java对象上同步文件访问

我有一个对象负责将JTable状态持久化到磁盘。 它保存/加载可见列,它们的大小,位置等。下面是类定义中的一些有趣的部分。 class TableSaver { Timer timer = new Timer(true); TableSaver() { timer.schedule(new TableSaverTimerTask(), 15000, SAVE_STATE_PERIOD); } synchronized TableColumns load(PersistentTable table) { String xml = loadFile(table.getTableKey()); // parse XML, return } synchronized void save(String key, TableColumns value) { try { // Some preparations writeFile(app.getTableConfigFileName(key), xml); } catch (Exception e) { // … handle } } […]

同时调用singleton对象的Java方法

我有一个关于Java中multithreading方法调用的问题。 假设我们有一个单例对象,其类声明如下: public class SomeClass { public void someMethod(SomeValueObject object) { if (object.condition1) { … } if (object.condition2) { … } if (object.condition3) { … } } } 我想知道这个单例对象是否被同时访问并且它的someMethod使用不同的SomeValueObject实例调用,是否有可能一些随机线程更改对象的引用以进行另一个线程的方法调用并搞乱事情? 那么在方法范围内创建的字段呢? 我不知道的是,是否为调用该方法的每个线程创建了单独的Method上下文,或者对于调用它的所有线程,Method上下文是否相同? 如果是后一种情况,我想我需要synchronized关键字用于线程安全,或者为每个线程使用不同的SomeClass实例(如果我需要更快的执行而不是内存优化)。 你能帮我解释一下吗? PS感谢您的所有答案!

让你的collections线程安全吗?

在设计集合类时,有没有理由不私下实现锁定以使其线程安全? 或者我应该将该责任留给collections的消费者?

MultiThreading与ThreadPoolExecutor

我在我写的许多应用程序中使用过multithreading。 在阅读更多内容时,我遇到了ThreadPoolExecutors 。 我无法区分这两种情况。 我仍然理解的是,当我有一项任务时,我应该使用multithreading我想将任务分成多个小任务来利用CPU并更快地完成工作。 当我设置任务时,使用ThreadPoolExecutor ,每个任务可以相互独立运行。 如果我错了,请纠正我。 谢谢

unit testing在调试模式下成功,但在正常运行时失败

为什么我的unit testing在调试模式下成功但在正常运行时失败? public class ExecutorServiceTest extends MockitoTestCase{ private int numThreads; private ExecutorService pool; private volatile boolean interruptedBitSet; @Override public void setUp() { numThreads = 5; pool = Executors.newFixedThreadPool(numThreads); } class TaskChecksForInterruptedBit implements Callable { @Override public String call() throws Exception { interruptedBitSet = false; while (!Thread.currentThread().isInterrupted()) { } interruptedBitSet = Thread.currentThread().isInterrupted(); return “blah”; } } […]

如何在multithreading环境中更好地使用ExecutorService?

我需要创建一个库,在其中我将有同步和异步方法。 executeSynchronous() – 等到我有结果,返回结果。 executeAsynchronous() – 立即返回一个Future,如果需要,可以在其他事情完成后处理。 我的图书馆的核心逻辑 客户将使用我们的库,他们将通过传递DataKey构建器对象来调用它。 然后,我们将使用该DataKey对象构造一个URL,并通过执行它来对该URL进行HTTP客户端调用,然后在我们将响应作为JSON字符串返回之后,我们将通过创建将该JSON字符串发送回我们的客户DataResponse对象。 有些客户会调用executeSynchronous() ,有些可能会调用executeAsynchronous() ,这就是为什么我需要在我的库中单独提供两个方法。 接口: public interface Client { // for synchronous public DataResponse executeSynchronous(DataKey key); // for asynchronous public Future executeAsynchronous(DataKey key); } 然后我有我的DataClient实现上面的Client接口: public class DataClient implements Client { private RestTemplate restTemplate = new RestTemplate(); // do I need to have all threads as […]

如何检查等待同步方法解锁的线程数

有没有办法检查有多少线程在等待同步方法解锁? 我想知道线程何时调用synchronized方法: 1)已经有多少线程在等待调用该方法? 2)一旦调用该方法需要等待该方法解锁多长时间? 解决方案:我使用堆垛机解决了这个问题: public class LockedClass { public static int count; public static void measuringClass() throws IOException{ long startTime = System.currentTimeMillis(); count++; System.out.println(“Threads waiting=”+count); lockedMethod(startTime); count–; System.out.println(“Threads waiting=”+count); } public static synchronized void lockedMethod(long startTime) throws IOException{ System.out.println(“I spent=”+(System.currentTimeMillis()-startTime)+” in the queue”); Hashtable params = new Hashtable(); params.put(“param1”, “test”); params.put(“param2”, “12345678”); String sessionId […]

JavaBu+中的DocumentBuilderFactory是否是线程安全的?

javax.xml.parsers.DocumentBuilderFactory的Java 1.4 doc毫不含糊地说明: DocumentBuilderFactory类的实现不保证是线程安全的。 用户应用程序要确保从多个线程中使用DocumentBuilderFactory。 或者,应用程序可以为每个线程提供一个DocumentBuilderFactory实例。 应用程序可以使用工厂的同一实例来获取DocumentBuilder的一个或多个实例,前提是工厂实例一次不在多个线程中使用。 然而, Java 5和Java 6文档并没有说明这种情况。 DocumentBuilderFactory现在是线程安全的,还是Sun刚刚决定警告是否过度,人们应该知道更好?

LinkedBlockingQueue put vs offer

我有一个链接阻塞队列,我在其中执行插入和删除操作。 在链接阻塞队列的情况下,我需要知道哪一个更好put或offer 。 性能参数是CPU利用率,内存和总吞吐量。 应用程序使用是实时系统,其中可以有多个传入请求和较少的线程来处理我们需要在队列中插入元素的位置。 我阅读了Java文档的put和offer,内部应用程序没有太大区别。

为什么要减小Java JVM线程堆栈的大小?

我正在阅读一篇关于在Java(以及JBoss平台)中处理Out Of Memory错误情况的文章 ,我看到了这个减少threadstack大小的建议。 如何减少threadstack的大小有助于最大内存错误条件?