Tag: multithreading

跟踪Java线程创建和生命周期

是否有任何工具可用于跟踪Java线程的创建和生命周期? 我会对以下所有内容感兴趣: 调用新线程()的调用堆栈 调用start()的调用堆栈 run()方法的生命周期

断点是否会停止所有线程?

如果我在程序中同时运行两个线程并在其中一个上放置一个断点,那么另一个线程是否会在该断点被触发时停止,或者它是否会继续执行? (我用Java编写并使用NetBeans)

为什么用Java检查双重检查锁定?

据说,除了long或double字段外,字段赋值总是primefaces的。 但是,当我读到为什么双重检查锁定被破坏的解释时,它说问题在于赋值操作: // Broken multithreaded version // “Double-Checked Locking” idiom class Foo { private Helper helper = null; public Helper getHelper() { if (helper == null) { synchronized(this) { if (helper == null) { helper = new Helper(); } } } return helper; } // other functions and members… } 线程A注意到该值未初始化,因此它获得锁定并开始初始化该值。 由于某些编程语言的语义,允许编译器生成的代码在A完成初始化之前更新共享变量以指向部分构造的对象。 线程B注意到共享变量已初始化(或显示),并返回其值。 因为线程B认为该值已经初始化,所以它不会获得锁定。 如果B在B看到A完成的所有初始化之前使用该对象(因为A尚未完成初始化或者因为对象中的某些初始化值尚未渗透到内存B使用(缓存一致性)) […]

在Java中并行执行从属任务

我需要找到一种在java中并行执行任务(依赖和独立)的方法。 任务A和任务C可以独立运行。 任务B取决于任务A的输出。 我检查了java.util.concurrent Future和Fork / Join,但看起来我们无法向Task添加依赖项。 任何人都可以指出我更正Java API。

同步和静态同步有什么区别?

对于有100个并发用户登录的旅行预订网络应用程序,是否应通过“同步”或“静态同步”方法实现机票预订并生成“电子机票号码”?

为什么在java中的线程对象上调用start()时不立即调用run()

或者是吗? 我有一个线程对象来自: Thread myThread = new Thread(pObject); 其中pObject是实现Runnable接口的类的对象,然后我在线程对象上调用start方法,如下所示: myThread.start(); 现在,我的理解是当调用start()时,JVM隐式(并立即)调用run()方法,该方法可能被覆盖(就像我的情况一样) 但是,在我的情况下,似乎不立即调用start()方法(根据需要),但直到从调用块完成其他语句/方法,即如果我在start()调用之后有一个方法,如下所示: myThread.start(); doSomethingElse(); doSomthingElse()在run()方法运行之前执行。 也许我错误的初始前提是run()总是在调用start()之后调用。 请帮忙! 再次想要的是在start()之后立即执行run()。 谢谢。

在多个不同线程之间共享变量

我想在多个线程之间共享一个变量,如下所示: boolean flag = true; T1 main = new T1(); T2 help = new T2(); main.start(); help.start(); 我想在main和help线程之间共享flag ,这些是我创建的两个不同的Java类。 有办法做到这一点吗? 谢谢!

如何通过另一个线程停止线程?

我在Java中遇到了一些线程,我有三个线程 – thread1,thread2和thread3。 它们在启动时正在做一些任务,我想通过thread1来阻止这两个线程。 我把thread1用于sleep(500) ,然后我停止两个线程,但两个线程的进程仍在运行。 你知道怎么做吗?

在具有等待任务时动态调整java.util.concurrent.ThreadPoolExecutor的大小

我正在使用java.util.concurrent.ThreadPoolExecutor来并行处理多个项目。 尽管线程本身工作正常,但由于线程中发生的操作,我们有时会遇到其他资源限制,这使我们想要调低池中线程的数量。 我想知道在线程实际工作时是否有办法拨打线程数。 我知道您可以调用setMaximumPoolSize()和/或setCorePoolSize() ,但这些只会在线程空闲后调整池的大小,但是在队列中没有任务等待之前它们不会变为空闲。

我正确使用Java PooledConnections吗?

我想使用与Java的池连接(因为每个线程创建一个连接的成本MysqlConnectionPoolDataSource() )所以我使用的是MysqlConnectionPoolDataSource()对象。 我在线程中持久化我的数据源。 所以,我只在整个应用程序中使用一个数据源,如下所示: startRegistry(); // creates an RMI registry for MySQL MysqlConnectionPoolDataSource dataSource = new MysqlConnectionPoolDataSource(); dataSource.setUser(“username”); dataSource.setPassword(“password”); dataSource.setServerName(“serverIP”); dataSource.setPort(3306); dataSource.setDatabaseName(“dbname”); InitialContext context = createContext(); // Creates a context context.rebind(“MySQLDS”, dataSource); 现在我已经创建了数据源,我在每个单独的线程中执行以下操作: PooledConnection connect = dataSource.getPooledConnection(); Connection sqlConnection = connect.getConnection(); Statement state = sqlConnection.createStatement(); ResultSet result = state.executeQuery(“select * from someTable”); // Continue processing […]