1

我有一个需要分发的系统,其工作方式如下。由 tomcat 服务的 Servlet 启动并产生具有大量共享(分布式)字段的线程。因此,我将线程设置为根,并尝试从我的 servlet 构造函数中正常生成线程。但是,日志记录表明我尝试共享的 Runnable 的构造函数永远不会完成。什么可能导致这种情况?

在我的 servlet 中,我有一个线程实例,我尝试将其作为根共享,并且日志记录表明一切都很好,直到实现可运行的类 (UpdaterThread) 的构造函数结束。

我有以下内容:

小服务程序:

打印“创建新线程”;updaterThread = new UpdaterThread(args); 打印“启动线程。”;新线程(更新线程).start();

现在,我从未在我的 tomcat 控制台输出中看到“启动线程”,尽管我可以看到直到 UpdaterThread 构造函数末尾的所有打印语句。UpdaterThread 维护一个对映射(由 servlet 共享)、一个字符串、一个 SQL 连接、一个语句、一个 ReentrantReadWriteLock、一个 Long 以及一个临时布尔值和 Long 不共享的引用。

在 UpdaterThread 的构造函数中,我传递了对共享映射的引用和字符串的值。如果没有启用兵马俑,我可以超越这一点。什么会导致 tomcat 和 terracotta 挂起而没有任何错误消息?在调用以后的方法之前,不会使用 rrwl 锁,但是我在程序执行中从来没有走那么远。帮助?

4

1 回答 1

2

解决了。我不得不重新启动 Terracotta 服务器,然后让我看到错误,表明 Statement 和 Connection 是不可移植的类,需要将其设置为瞬态。

于 2009-04-07T21:41:49.943 回答