我有一个需要分发的系统,其工作方式如下。由 tomcat 服务的 Servlet 启动并产生具有大量共享(分布式)字段的线程。因此,我将线程设置为根,并尝试从我的 servlet 构造函数中正常生成线程。但是,日志记录表明我尝试共享的 Runnable 的构造函数永远不会完成。什么可能导致这种情况?
在我的 servlet 中,我有一个线程实例,我尝试将其作为根共享,并且日志记录表明一切都很好,直到实现可运行的类 (UpdaterThread) 的构造函数结束。
我有以下内容:
小服务程序:
打印“创建新线程”;updaterThread = new UpdaterThread(args); 打印“启动线程。”;新线程(更新线程).start();
现在,我从未在我的 tomcat 控制台输出中看到“启动线程”,尽管我可以看到直到 UpdaterThread 构造函数末尾的所有打印语句。UpdaterThread 维护一个对映射(由 servlet 共享)、一个字符串、一个 SQL 连接、一个语句、一个 ReentrantReadWriteLock、一个 Long 以及一个临时布尔值和 Long 不共享的引用。
在 UpdaterThread 的构造函数中,我传递了对共享映射的引用和字符串的值。如果没有启用兵马俑,我可以超越这一点。什么会导致 tomcat 和 terracotta 挂起而没有任何错误消息?在调用以后的方法之前,不会使用 rrwl 锁,但是我在程序执行中从来没有走那么远。帮助?