发表时间:2022-03-25来源:网络
(很多概念都与操作系统息息相关,操作系统很重要啊很重要很重要,小白一定要好好学习操作系统,一些概念就简单提一下)
1.1 什么是线程
线程是进程的一个实体,是cpu分配的基本单位.每个线程都有自己的栈资源,用于存储线程的局部变量.
那什么是进程呢?
进程是代码在数据集合上的一次运行.每个进程都有自己独立的一块内存空间.堆是一个进程中最大的一块内存,是进程中所有线程共享的.
(具体对比就不列出啦,hxd们可以回忆或者搜索一下)
在java中,当我们启动main()函数时其实就是启动了一个JVM的进程,而main()所在的线程就是这个进程中的一个线程(主线程).
1.2 线程的创建与运行
1.继承Thread类并重写run方法
2.实现Runnable接口的run方法
这两种具体实现不在这演示了,但有一些细节需要大家注意:
很多同学都觉得thread.start()就是线程就真正启动了,但其实线程只是处于就绪状态等待cpu.java的单继承限制了第一种方法这两种方法都没有返回值3.使用FutureTask
CallerTask.java
这里我们看一下Callable的源码

Callable使用了泛形,V call()返回类型为上面设置的V类型.我们使用了String,所以下面的call()方法返回类型也是String.
Test.java
有兴趣可以看看FutureTask的源码,实际上用了Runnable和Future
1.3 线程的一些基本方法
synchronized:锁wait(),wait(timeout):阻塞线程,并释放相应的锁,后者设置被唤醒的超时时间notify(),notifyAll():唤醒阻塞的线程.notify()随机唤醒一个阻塞在该共享变量上的阻塞线程,notifyAll()唤醒所有阻塞在该共享变量上的阻塞线程.join()interrupt()sleep()1.4 线程死锁
死锁是指两个和两个以上的线程在执行过程中,因争夺资源而造成的相互等待现象

产生死锁的四大基本条件:
互斥请求并保持不可剥夺循环等待所以解决死锁我们也要从这四大条件入手
1.5 守护线程(daemon)和用户线程(user)
main()所在的线程就是一个用户线程,在jvm内部其实还启动了很多守护线程:垃圾回收线程等.区别主要在于用户线程才会影响jvm退出.
设置为守护线程:daemonThread.setDaemon(true)
计支宝app下载v3.1.29 安卓版
142.27MB |商务办公
小小优酷最新版下载v5.4.6 安卓官方版
68.11MB |影音播放
艺图语app下载v3.3.4 安卓免费版
34.33MB |系统工具
爱鸽者手机版下载v3.2.9 安卓版
243.57MB |商务办公
一品威客网接单app(一品众包)下载v2.7.1 安卓最新版
55.01MB |商务办公
诸葛找房网官方版下载v4.8.1.1 安卓最新版
66.6MB |生活服务
皓盘云建最新版下载v9.0 安卓版
53.38MB |商务办公
ris云客移动销售系统最新版下载v1.1.25 安卓手机版
42.71M |商务办公
葫芦侠三楼最新破解版下载v4.4.0.6 安卓版
其它手游葫芦侠7楼破解版免费下载v4.4.0.6安卓最新版
其它手游葫芦侠八楼免费版下载v4.4.0.6安卓版
其它手游葫芦侠3楼破解版免费下载v4.4.0.6安卓手机版
其它手游像素漫斗抱歉,“八神庵”是特指游戏角色的专有名词,不存在符合要求的常用同义词近义词。下载v1.00安卓版
其它手游葫芦侠4楼破解版游戏修改器下载v4.4.0.6安卓免费版
其它手游末日餐厅安卓版下载v1.35安卓版
其它手游葫芦侠十楼免费破解版下载v4.4.0.6安卓版
其它手游葫芦侠8楼最新破解版下载v4.4.0.6安卓版
其它手游