Java 如何计算线程被挂起的次数
我正在用java编写一个非常简单的程序,尽管我是一名学生。我制作了一个程序,在1000时计数1,当数字是2的倍数时,线程将暂停大约500毫秒。没关系。但是在最后,我需要显示线程被挂起了多少次。像Java 如何计算线程被挂起的次数,java,multithreading,runnable,Java,Multithreading,Runnable,我正在用java编写一个非常简单的程序,尽管我是一名学生。我制作了一个程序,在1000时计数1,当数字是2的倍数时,线程将暂停大约500毫秒。没关系。但是在最后,我需要显示线程被挂起了多少次。像 System.out.println("The thread has been suspended for: " ); 我不知道。谢谢你的帮助 @Override public void run () { for (int i = 0; i < 1000; i++) {
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: ");
}
@覆盖
公开作废运行(){
对于(int i=0;i<1000;i++){
如果(i%2==0){
试一试{
系统输出打印LN(i);
睡眠(500);
}捕获(中断异常例外){
Logger.getLogger(ThreadNumeros.class.getName()).log(Level.SEVERE,null,ex);
}
}
}
System.out.println(“线程已暂停:”);
}
不要将(暂停)和(睡眠)混在一起:它们的工作方式不同
Thread.sleep()
在一段时间内处于“可运行”状态。线程保存监视器
它已获取--即线程当前是否处于同步状态
块或方法没有其他线程可以进入此块或方法。如果
另一个线程调用t.interrupt()
它将唤醒休眠线程
线
t.suspend()
已弃用。使用它可以停止一个进程
当前线程以外的其他线程。挂起的线程保留其所有属性
监视器,由于此状态不可中断,因此为死锁
俯卧的
stop()、suspend()、resume()
是用于线程的方法
实施<代码>停止()
如果已停止,则无法使用start()
方法重新启动,因为
stop()
将终止线程的执行。相反,你可以暂停
使用sleep()
方法执行线程。这根线会
睡眠一段时间,然后在
时间到了。但是,如果线程需要
当某个事件发生时启动。在这种情况下,suspend()
方法允许线程临时停止执行<代码>恢复()
方法
允许挂起的线程重新启动
同步-:如果将任何方法声明为已同步
,则称为“已同步方法”
同步方法用于锁定任何共享资源的对象
当线程调用同步方法时,它会自动获取
该对象的锁,并在线程完成其任务时释放它
任务
像这样尝试-:
@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);
}
@覆盖
公开募捐{
整数计数=0;
对于(int i=0;i<1000;i++){
如果(i%2==0){
试一试{
系统输出打印LN(i);
睡眠(500);
计数+=1
}捕获(中断异常例外){
Logger.getLogger(ThreadNumeros.class.getName()).log(Level.SEVERE,null,ex);
}
}
}
System.out.println(“线程已暂停:“+count”);
}
有要显示的代码吗?@TusharSharma,对不起。我编辑过。你是说数你调用sleep()
的次数吗?如果是这样的话,只需使用一个计数器(当然,作为一个概括,你可以知道它将提前500次到达那里)。另一方面,如果你的意思是线程因任何原因被挂起多少次,那就不同了。@cbuchart,是的,我想知道线程因任何原因被挂起多少次。我认为下面的解决方案是正确的,不是吗?有其他办法解决这个问题吗?谢谢你的帮助!令人惊叹的。工作起来很有魅力。真的谢谢@塔沙尔哈马。这么简单,我无法理解。继续学习!再次感谢。@Cavalerio无问题,请勿对未引用的文本使用引用格式。对包含代码的文本使用代码格式。