我想知道在第一个线程的run方法中中断另一个线程是否违法。如果是,当我在第一个线程的run方法中调用另一个线程的中断方法时,会抛出“InterruptedException”吗?像这样:
public static void main(String[] args) {
Thread thread1 = new Thread(() -> {
while (true) {
}
}, "thread1");
try {
thread1.sleep(10000);
} catch (InterruptedException e) {
System.out.println("Oops! I'm interrupted!");
}
Thread thread2 = new Thread(() -> {
System.out.println("I will interrupt thread1!");
thread1.interrupt();
System.out.println("Thread1 interruption done!");
}, "thread2");
thread1.start();
thread2.start();
}
但我没有留言“哎呀!我被打断了!”在控制台中。
答案 0 :(得分:5)
您的程序无法正常工作的原因是您使用def allRows(rs: ResultSet): Stream[Row] =
Stream.continually(if (rs.next) Some(new Row(rs)) else None)
.takeWhile(_.isDefined).map(_.get)
引用来访问静态thread1
方法,但仍然在主线程中执行休眠。
将其移动到sleep()
的正文中,您的程序运行正常:
thread1
打印:
public static void main(String[] args) {
Thread thread1 = new Thread(() -> {
try {
Thread.sleep(10000);
} catch (InterruptedException e) {
System.out.println("Oops! I'm interrupted!");
}
}, "thread1");
Thread thread2 = new Thread(() -> {
System.out.println("I will interrupt thread1!");
thread1.interrupt();
System.out.println("Thread1 interruption done!");
}, "thread2");
thread1.start();
thread2.start();
}
请注意,最后两个打印输出的顺序取决于线程安排,并且可能会有所不同。