java 守护进程的代码 大佬看看 为啥张飞和关羽出不来

Lin_bai_ 2021-01-19 06:13:54
package Com.wj.demo03;

public class TestDemo03 {
public static void main(String[] args){
MyTask mt = new MyTask();
Thread th = new Thread(mt,"关羽");

MyTask mt2 = new MyTask();
Thread th2 = new Thread(mt,"张飞");
/* th2.setPriority(Thread.MAX_PRIORITY);
th2.setPriority(10);*/
th.setDaemon(true);
th2.setDaemon(true);
th.start();
/*th.join();*/

th2.start();
for (int i = 0;i<100;i++){
System.out.println("刘备"+i);
}
}
}
package Com.wj.demo03;

public class MyTask implements Runnable {
@Override
public void run() {

for (int i=0;i<100;i++){
/*try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}*/
System.out.println(Thread.currentThread().getName()+":"+i);
/*Thread.yield();*/
}
}
}

...全文
159 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
叫练 2021-01-20
  • 打赏
  • 举报
回复
/**
 * @author :jiaolian
 * @date :Created in 2021-01-20 10:10
 * @description:守护进程测试
 * @modified By:
 * 公众号:叫练
 */
public class DemoTest {
    public static void main(String[] args) throws InterruptedException {
        MyTask mt = new MyTask();
        Thread th = new Thread(mt,"关羽");

        MyTask mt2 = new MyTask();
        Thread th2 = new Thread(mt,"张飞");
       /* th2.setPriority(Thread.MAX_PRIORITY);
        th2.setPriority(10);*/
        th.setDaemon(true);
        th2.setDaemon(true);
        th.start();
        /*th.join();*/

        th2.start();
        for (int i = 0;i<1;i++){
            Thread.sleep(3000);
            System.out.println("刘备"+i);
        }
    }

    private static class MyTask implements Runnable {
        @Override
        public void run() {

            for (int i=0;i<100;i++){
            /*try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }*/
                System.out.println(Thread.currentThread().getName()+":"+i);
                /*Thread.yield();*/
            }
        }
    }
}
根据您的代码,一共是3个线程,其中“”关羽“”,“”张飞“”为自定义线程,“”刘备“”是主线程,“”关羽“”,“”张飞“”为守护线程,也就是说“”刘备“”over后,“”关羽“”,“”张飞“”会立马over,根据您的描述,没有看到“”关羽“”,“”张飞“”执行就OVER了,也就说明了“”刘备“”over太快了,那解决办法就是让“”刘备“”over慢一些,所以如上代码第24行,刘备多活了3秒,他的兄弟也就获取了更多执行时间。希望回答对你有所帮助!
qybao 2021-01-19
  • 打赏
  • 举报
回复
你把for循环放大到10亿试试 循环100太快了,主线程一下子就结束了,守护线程也跟着over玩完了

50,523

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧