我正在编写一个涉及多线程工作池的Java程序,其中包含一些Process。每个Process实例都需要能够生成一个单独的附加线程来执行一些工作。但是该线程应该由该实例本身而不是其他人生成。不幸的是,Runnable.run是“public”方法,所以我不能真正地在没有进行某些技巧的情况下强制执行这一点。
以下是我计划使用的技巧:
1. 在Process中实现Runnable 2. 将此代码写入实现中:
代码:
当我想要合法地运行时,现在我所需要做的就是在调用之前打开“threadkey”(它是私有的)。
优雅吗?还是不优雅?或者有更好的方法?或者我应该不费心地解决这个问题,并写一个简洁明了的注释来解释不要调用“run”?
人们是否会从需要“运行”的类中调用“run”?
以下是我计划使用的技巧:
1. 在Process中实现Runnable 2. 将此代码写入实现中:
代码:
class Process implements Runnable {
private boolean threadkey = false;
public void run() {
synchronized(threadkey) {
// is someone wrongly calling 'run'?
if(!threadkey)
return;
/* switch off threadkey to make sure
it cannot be called meaningfully again */
threadkey = false;
}
/* continue processing
*
*/
return;
}
当我想要合法地运行时,现在我所需要做的就是在调用之前打开“threadkey”(它是私有的)。
优雅吗?还是不优雅?或者有更好的方法?或者我应该不费心地解决这个问题,并写一个简洁明了的注释来解释不要调用“run”?
人们是否会从需要“运行”的类中调用“run”?