我有一个类,需要不时生成一个密钥并与客户端和服务器共享。
Kdc课程:
protected Kdc() {
(do stuff)
runKdc();
}
private void runKdc(){
for(;;){
generateKey();
informClients();
informServers();
try {
Thread.sleep(generationTime);
} catch (InterruptedException e) {
System.out.println("Sleep Interrupted");
}
}
}
主要课程:
public static void main(String[] args) {
Kdc kdc = new Kdc();
System.out.println("done"); //Doesn't reach the line
}
现在我的问题是我需要在启动Kdc课程后做点什么而且我不能!由于无限循环,它在启动Kdc类后才会卡在Main类中。 有什么想法吗?
谢谢。
答案 0 :(得分:3)
您应该在sperate线程中运行KDC。该线程将在后台运行,您的main方法将继续。
对于这个循环:
while(true){
//do something
}
比你的for(;;){}循环要好得多。将“true”替换为“running”或“active”等布尔变量
答案 1 :(得分:2)
正如其他人所说,你应该在它自己的线程中创建Kdc,例如
package com.testingarea;
class Kdc {
public Kdc() {
runKdc();
}
private void runKdc() {
while(true) {
System.out.println("Running kdc");
try {
Thread.sleep(5000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
class RunKdc implements Runnable {
@Override
public void run() {
Kdc k = new Kdc();
}
}
public class TestThread {
public static void main(String[] args) {
new Thread(new RunKdc()).start();
System.out.println("Kdc thread started");
}
}
答案 2 :(得分:1)
在新线程中启动Kdc类,或创建执行kdc.runKdc()
的计时器。
您可以在新线程中创建实例,如下例所示,或者只在新线程中运行runKdc()
的代码。
public static void main(String[] args)
{
Thread keyGenerationThread= new Thread()
{
@Override
public void run()
{
Kdc kdc = new Kdc();
}
};
keyGenerationThread.start();
System.out.println("done");
}