知识屋:更实用的电脑技术知识网站
所在位置:首页 > 教育

JAVA并发编程(一)基础知识

发表时间: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)

收藏
  • 人气文章
  • 最新文章
  • 下载排行榜
  • 热门排行榜