人开始反向思考
—— 24.5.26
定时器_Timer
1.概述:定时器
2.构造:
Timer()
3.方法:
void schedule(TimerTask task, Date firstTime, long period)
task:抽象类,是Runnable的实现类
firstTime:从什么时间开始执行
period:每隔多长时间执行一次,设置的是毫秒值package S82ThreadTimer; import java.util.Date; import java.util.Timer; import java.util.TimerTask; public class Demo222Timer { public static void main(String[] args) { Timer timer = new Timer(); timer.schedule(new TimerTask() { @Override public void run() { System.out.println("一切都会好的 我一直相信"); } },new Date(),2000L); } }
总结
等待唤醒
wait()
线程等待,等待的过程中,释放锁,需要其他线程调用notify去唤醒
notify()
唤醒一个等待的线程,如果有多个线程等待,随机一条唤醒
notifyAll()
唤醒所有等待的线程
Lock锁
1.概述 — 接口
2.使用
a.获取 — ReentrantLock
b.方法
lock() 获取锁
unlock() 释放锁
Callable
1.概述
接口,类似于Runnable,是实现多线程的第三种方式
2.方法 -- call()
设置线程任务,类似于run方法
可以throws异常,还有返回值线程池
1.概述
容器中有多条线程对象,来了线程任务,直接从线程池中获取线程对象,用完还回去
2.获取
static ExecutorService
newFixedThreadPool(int nThreads)
3.执行线程任务
Future<?>submit(Runnable task)提交一个Runnable任务用于执行
Future<T> submit(Callable<T> task) 提交一个Callable任务用于执行4.返回值
Future接囗 — Vget() 用于获取call方法返回值
5.关闭线程池
void shutdown()启动有序关闭,其中先前提交的任务将被执行,但不会接受任何新任务