我有一个需要 distrubte 的系统,其工作原理如下。由 tomcat 提供服务的 Servlet 启动并产生具有大量共享(分布式)字段的线程。因此,我将线程设置为根,并尝试从 servlet 构造函数正常生成线程。但是,日志记录表明我尝试共享的 Runnable 构造函数永远不会完成。可能是什么原因造成的?
在我的 servlet 中,我有一个线程实例,我尝试将其作为根共享,并且日志记录表明一切正常,直到实现 runnable 的类 (UpdaterThread) 的构造函数结束。
我有以下内容:
Servlet:
print "创建新线程"; updaterThread = 新的 UpdaterThread(args); 打印“启动线程。”; 新线程( updaterThread ).start();
现在,我在 tomcat 控制台输出中从未看到“启动线程”,尽管我可以看到直到 UpdaterThread 构造函数末尾的所有打印语句。 UpdaterThread 维护对映射(由 servlet 共享)、字符串、SQL 连接、语句、ReentrantReadWriteLock、Long 以及不可共享的 transient boolean 值和 Long 的引用。
在 UpdaterThread 的构造函数中,我传递了对共享映射的引用和字符串的值。如果没有启用 terracotta,我可以超越这一点。什么会导致 tomcat 和 terracotta 挂起而没有任何错误消息? rrwl 锁只有在调用后面的方法时才会使用,但我在程序执行过程中从未走得那么远。帮忙?
最佳答案
已解决。我必须重新启动 Terracotta 服务器,然后它让我看到错误,表明 Statement 和 Connection 是需要临时处理的不可移植类。
关于java - 关于 Terracotta 和 Servlet/共享线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/727670/