(多)线程——Thread(三)

吃可爱长大的小学妹 提交于 2020-02-29 13:53:01

Object类是所有类的祖先类。
在这里插入图片描述
线程加锁示例

定时器||闹钟在这里插入图片描述

//定时器,闹钟
import java.util.Timer;
import java.util.TimerTask;
public class UserTime {
    private static class MyTimerTask1 extends TimerTask {
        @Override
        public void run() {
            System.out.println("该起床了!");
        }
    }
    /*private static class MyTimerTask2 extends TimerTask {
        @Override
        public void run() {
            System.out.println("该洗脸了!");
        }
    }*/
    /*private static class MyTimerTask3 extends TimerTask {
        @Override
        public void run() {
            System.out.println("该刷牙了!");
        }
    }*/
    public static void main(String[] args) {
        Timer timer=new Timer();
        timer.schedule(new MyTimerTask1(),5000);//在指定的延迟之后安排指定的任务执行
        timer.scheduleAtFixedRate(new MyTimerTask1(),1000,1000);
        //在指定的延迟之后 开始 ,重新执行 固定速率的指定任务
        /*timer.schedule(new MyTimerTask2(),10000);
        timer.schedule(new MyTimerTask3(),5000);*/
    }
}

线程池技术:一次有多个线程,等任务来了,哪个线程有时间,哪个线程就执行该任务。当线程足够多了,但任务还很多那么剩余的任务会被放到队列里;如果线程足够多,且队列也满了,可以抛异常或者回调函数。

package pool;

import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

public class UsePool {
    public static void main(String[] args) {
        //相当于一开始这个线程池就有1个任务,需要1个线程,若有多的线程就得放在队列里
        ExecutorService pool=Executors.newFixedThreadPool(1);//已创建好一个线程池
        //接下来该让它执行任务
        pool.execute(new Runnable(){
            @Override
            public void run() {
                while(true){
                    System.out.println("我是第一个线程");
                }
            }
        });
        pool.execute(new Runnable(){
            @Override
            public void run() {
                while(true){
                    System.out.println("我是第二个线程");
                }
            }
        });
    }
}
//内部有线程池执行任务,仅仅要给它提交的是任务,不再去管具体的线程
//线程的创建和释放线程池去实现
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!