我有2个主题,其中一个轮询邮箱中的邮件,然后正在睡觉while (!quit)
,另一个应该更改quit
标志,如果用户输入'Q'
。似乎扫描线程阻塞其他线程执行,直到有一些输入(通常是2行)。我试着改变线程的优先级和它们开始的顺序,但都无济于事。如何让我的主题不会彼此阻塞?
class quitThread extends Thread {
public void run() {
char c;
Scanner scanner = new Scanner(System.in);
do {
c = scanner.nextLine().toUpperCase().charAt(0);
} while (c != 'Q');
quit = true;
}
}
class recieveThread extends Thread {
public void run() {
System.out.println("thread started");
while (!quit) {
try {
MailHandler handler = new MailHandler();
handler.recieve();
System.out.println("Sleeping");
sleep(_sleepinterval);
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
我知道我担心互斥和同步的,但我想在线程至少工作之前,我开始担心。 编辑: 这是我怎样,我开始线程:
void go() throws Exception{
char c;
System.out.println("S or R");
Scanner s = new Scanner(System.in);
c = s.nextLine().toUpperCase().charAt(0);
MailHandler handler = new MailHandler();
QuitThread q = new QuitThread();
q.setPriority(java.lang.Thread.MIN_PRIORITY);
RecieveThread rc = new RecieveThread();
rc.setPriority(java.lang.Thread.MAX_PRIORITY);
switch (c){
case 'S':
handler.send("[email protected]", "hello there");
break;
case 'R':
rc.start();
q.start();
break;
default :
break;
}
}
注:优先事项是不是原来在那里,它的东西,我只是想和它没有任何区别。
代码片段中没有明显的问题。没有足够的信息来推断问题的原因。 – McDowell 2009-02-25 15:17:31
你需要展示你如何开始这些线程。 – Clint 2009-02-25 15:38:44
我希望“quit”被定义为volatile。你现在确实需要担心同步。这可能是你的问题的一部分。另外,在Java中,类名预计以大写字母开头。 – Eddie 2009-02-25 15:46:39