线程其他内容(守护线程、定时器、实现线程的第三种方式

本文介绍了Java中实现线程的三种方式,包括守护线程的设置、定时器的使用以及通过FutureTask创建线程。示例代码展示了如何创建守护线程,确保其随主线程结束而终止,以及如何使用Timer进行定时任务执行,每10秒打印一次时间。此外,还展示了FutureTask的用法,通过get()方法阻塞等待任务完成并获取结果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 守护线程:

main:{        
        MyThread t = new MyThread();
        t.setName("t");
        t.setDaemon(true);//设置为守护线程,主线程结束,t也会结束
        t.start();

        for (int i = 0;i < 10;i++){
            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            System.out.println(Thread.currentThread().getName() + "--->" +i);
        }
    }

    class MyThread extends Thread{
        public MyThread() {
        }

        @Override
        public void run() {
            int i = 0;
            while(true){
                try {
                    Thread.sleep(1000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                System.out.println(Thread.currentThread().getName()+"--->"+ i++);
            }
        }
    }

 定时器:

main:{
        Timer timer = new Timer();
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        Date firstTime = null;
        try {
            firstTime = sdf.parse("2022-10-17 17:46:00");
        } catch (ParseException e) {
            e.printStackTrace();
        }
        timer.schedule(new LogTimerTask(),firstTime,1000*10);
    }

    class LogTimerTask extends TimerTask {

        @RequiresApi(api = Build.VERSION_CODES.N)
        @Override
        public void run() {
            //需要执行的任务
            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
            String strTime = sdf.format(new Date());
            System.out.println(strTime + ":成功完成了一次备份");
        }
    }

实现线程的第三种方式:

            FutureTask task = new FutureTask(new Callable() {
            @Override
            public Object call() throws Exception {
                System.out.println("call method begin");
                Thread.sleep(10000);
                System.out.println("call method end");
                int a = 100;
                int b = 200;
                return a+b;
            }
        });
        Thread t = new Thread(task);
        t.start();
        try {
            Object obj = task.get();//get()会导致当前线程阻塞
        } catch (ExecutionException e) {
            e.printStackTrace();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        System.out.println("Hello world!");

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值