我在java中制作一个非常简单的程序,即使因为我是学生。我创建了一个计数为1000的程序,当该数字为2的多个时,该线程被暂停约500ms。没关系。但在决赛中,我需要显示线程被暂停的次数。像
System.out.println("The thread has been suspended for: " );
我不知道。我感谢任何帮助。
@Override
public void run () {
for (int i = 0; i < 1000; i++) {
if (i % 2 == 0) {
try {
System.out.println(i);
Thread.sleep(500);
} catch (InterruptedException ex) {
Logger.getLogger(ThreadNumeros.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
System.out.println("thread has been suspended for: ");
}
答案 0 :(得分:1)
不要与(睡眠)混合(暂停):它们的工作方式不同。
Thread.sleep()
将当前线程发送到&#34; Not
可运行&#34;状态一段时间。线程保持监视器
它已经获得 - 即如果该线程当前处于同步状态
块或方法没有其他线程可以进入此块或方法。如果
另一个线程调用t.interrupt()
它会唤醒睡眠
线程。
t.suspend()
已弃用。使用它可以停止a
当前线程以外的线程。悬挂的线程保留所有
监视器,因为这个状态不可中断,所以它是死锁
易发生。
stop(), suspend(), resume()
是用于线程的方法
实现。 stop()
- 终止线程执行,一次线程
停止后,无法使用start()
方法重新启动,因为
stop()
将终止线程的执行。相反,你可以暂停
使用sleep()
方法执行线程。线程会
睡一段时间然后开始执行时
达到了时间限制。但是,如果线程需要,这并不理想
在某个事件发生时启动。在这种情况下,suspend()
方法允许线程暂时停止执行。 resume()
方法
允许暂停的线程重新开始。
同步 - :如果您将任何方法声明为synchronized
,则称其为同步方法&#39;。
synchronized方法用于锁定任何共享资源的对象。
当线程调用synchronized方法时,它会自动获取 该对象的锁定,并在线程完成时释放它 任务。
尝试这样 - :
@Override
public void run() {
int count = 0;
for (int i = 0; i < 1000; i++) {
if (i % 2 == 0) {
try {
System.out.println(i);
Thread.sleep(500);
count+=1
} catch (InterruptedException ex) {
Logger.getLogger(ThreadNumeros.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
System.out.println("thread has been suspended for: "+count);
}