Java 同步无限循环服务';s初始化部分
我正在尝试实现一段代码,以便在Java中同步启动循环服务。其思想是,应该将Java 同步无限循环服务';s初始化部分,java,concurrency,synchronization,Java,Concurrency,Synchronization,我正在尝试实现一段代码,以便在Java中同步启动循环服务。其思想是,应该将//STARTER注释下的代码视为Service.go()方法的一部分,因此如果服务无法启动,我希望同步重新抛出异常。只有当我尝试启动线程,等待它的执行流到达某个点,然后,如果没有问题,我的go()方法退出,线程继续运行,或者,如果有问题,我可以从我的go()重新抛出线程的run()方法捕获的异常时,这段代码才应该完成方法。这是一个似乎很好的解决方案,但我很好奇是否有可能将它缩短几倍:-) 另外,在该线程中执行初始化代码有
//STARTER
注释下的代码视为Service.go()
方法的一部分,因此如果服务无法启动,我希望同步重新抛出异常。只有当我尝试启动线程,等待它的执行流到达某个点,然后,如果没有问题,我的go()
方法退出,线程继续运行,或者,如果有问题,我可以从我的go()重新抛出线程的run()
方法捕获的异常时,这段代码才应该完成方法。这是一个似乎很好的解决方案,但我很好奇是否有可能将它缩短几倍:-)
另外,在该线程中执行初始化代码有一个原因,因此,请不要建议在go()
方法中显式运行初始化代码,然后将所有内容传递给线程
谢谢 重写
Thread.start()方法怎么样
public static void main(String[] args) {
Thread t = new Thread() {
public void run() {
while (true) {
try {
System.out.printf("working...\n");
Thread.sleep(1000);
} catch (InterruptedException e) {
System.out.printf("interrupted\n");
}
}
}
@Override
public synchronized void start() {
try {
init();
} catch (Exception e) {
throw new RuntimeException(e);
}
super.start();
}
private void init() throws Exception {
throw new Exception("test");
}
};
t.start();
}
我相信,Thread.start()是在调用方的线程中执行的。那我猜你得等一把普通锁。
public static void main(String[] args) {
Thread t = new Thread() {
public void run() {
while (true) {
try {
System.out.printf("working...\n");
Thread.sleep(1000);
} catch (InterruptedException e) {
System.out.printf("interrupted\n");
}
}
}
@Override
public synchronized void start() {
try {
init();
} catch (Exception e) {
throw new RuntimeException(e);
}
super.start();
}
private void init() throws Exception {
throw new Exception("test");
}
};
t.start();
}