一、程序,进程,线程
程序:指令和数据的有序集合。
进程:执行程序的一次执行过程,是系统资源分配的单位。
线程:一个进程可以包含若干个线程,线程是CPU调度和执行的单位。
二、线程的创建
1.继承Thread
自定义线程类继承Thread类;
重写run()方法,编写线程执行体;
创建线程对象,调用start()方法启动线程。
2.实现Runnable
定义线程类实现Runnable接口
实现run()方法,编写线程执行体
创建线程对象,调用start()方法启动线程
3.实现Callable
实现Callable接口,需要返回值类型
重写call方法,需要抛出异常
创建目标对象
创建执行服务:ExecutorService ser = Executors.newFixedThreadPool(1);
提交执行:Future result1 = ser.submit(t1);
获取结果:boolean r1 = result1.get();
关闭服务:ser.shutdownNow();
三、线程状态
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-TRSLn847-1639220009189)(C:\Users\zq\AppData\Roaming\Typora\typora-user-images\image-20211211181601689.png)]
1.线程停止
不推荐使用JDK提供的stop()、destroy()方法
推荐线程自己停下来
建议使用一个标识位进行终止变量,当flag=false,则终止线程之执行
2.线程休眠
sleep(时间)指定当前线程阻塞的毫秒数;
sleep存在异常InterruptedException;
sleep时间达到后线程进入就绪状态;
sleep可以模拟网络延时,倒计时等;
每一个对象都有一个锁,sleep不会释放锁。
3.线程礼让
yield()
礼让线程,让当前正在执行的线程暂停,但不阻塞
将线程从运行状态转为就绪状态
让cpu重新调度,礼让不一定成功
4.线程强制执行
join()
合并线程,待此线程执行完后,再执行其他线程,其他线程阻塞。
持续更新中。。。