Java线程模型缺陷研究
应把suspend() 和 resume() 方法放回到 Java 编程语言中,它们是很有用的,我不想被当成是幼儿园的小孩。由于它们可能产生潜在的危险(当被挂起时,一个线程可以占据一个锁)而去掉它们是没有道理的。请让我自己来决定是否使用它们。如果接收的线程正占据着锁,Sun 公司应该把它们作为调用 suspend() 的一个运行时间异常处理(run-time exception);或者更好的方法是,延迟实际的挂起过程,直到线程释放所有的锁。
被阻断的 I/O 应正确工作
应该能打断任何被阻断的操作,而不是只让它们wait() 和 sleep() 。我在“ Taming Java Threads ”的第二章中的 socket 部分讨论了此问题。但是现在,对于一个被阻断的 socket 上的 I/O 操作,打断它的唯一办法是关闭这个 socket,而没有办法打断一个被阻断的文件 I/O 操作。例如,一旦开始一个读请求并且进入阻断状态后,除非到它实际读出一些东西,否则线程一直出于阻断状态。既使关掉文件句柄也不能打断读操作。
还有,程序应支持 I/O 操作的超时。所有可能出现阻断操作的对象(例如 InputStream 对象)也都应支持这种方法。
这和 Socket 类的setSoTimeout(time) 方法是等价的。同样地,应该支持把超时作为参数传递到阻断的调用。
ThreadGroup类
ThreadGroup应该实现 Thread 中能够改变线程状态的所有方法。我特别想让它实现 join() 方法,这样我就可等待组中的所有线程的终止。
总结
以上是我的建议。就像我在标题中所说的那样,如果我是国王...(哎)。我希望这些改变(或其它等同的方法)最终能被引入 Java 语言中。我确实认为 Java 语言是一种伟大的编程语言;但是我也认为 Java 的线程模型设计得还不够完善,这是一件很可惜的事情。但是,Java 编程语言正在演变,所以还有可提高的前景。