发表时间: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)
皓盘云建最新版下载v9.0 安卓版
53.38MB |商务办公
ris云客移动销售系统最新版下载v1.1.25 安卓手机版
42.71M |商务办公
粤语翻译帮app下载v1.1.1 安卓版
60.01MB |生活服务
人生笔记app官方版下载v1.19.4 安卓版
125.88MB |系统工具
萝卜笔记app下载v1.1.6 安卓版
46.29MB |生活服务
贯联商户端app下载v6.1.8 安卓版
12.54MB |商务办公
jotmo笔记app下载v2.30.0 安卓版
50.06MB |系统工具
鑫钜出行共享汽车app下载v1.5.2
44.7M |生活服务