java的多线程

进程是系统进行资源配置和调度的基本单位,是操作系统结构的基础。
一个标准的线程由线程id、指令指针(PC)、寄存器集合和堆栈组成。线程是进程中的一个实体,是被系统独立调度和分派的基本单位。线程自己不拥有系统资源,与其他同属于同一个进程的线程共享进程所拥有的全部资源。

基于进程的多任务特点:

  1. 每个进程在执行时,都有独立的内存空间。
  2. 进程又称重量级进程。
  3. 各进程间的信息传递是昂贵的。
  4. 从一个进程切换到另一个进程需要分别保留和下载缓存器、内存映像、更新串行等。

基于线程的多任务特点:

  1. 由于各线程间是独立的,所以可以同时完成多个工作。
  2. 因为可以同时完成多个工作,所以执行效率比较高。
  3. 由于各线程间是独立的,如果单个线程发生异常不会影响其他线程工作。
  4. 线程间由于是共享内存空间,线程间工作切换与通信成本很低。

守护进程:

守护进程是一种存在后台为一般线程提供服务的线程,例如,垃圾回收线程就是一种守护线程。
设计一个线程为守护线程时,主线程若是想要结束执行会检查剩下线程的属性。
(1)、如果此时剩下线程的Daemon属性是true,表示Daemon线程仍在执行,其他非Daemon线程执行结束,程序将不等待Daemon线程,也会自行结束,同时终止此Daemon线程工作。
(2)、如果此时剩下线程的Daemon属性是false,主线程会等待线程结束,再结束工作。

**

Java的同步

防止线程彼此干扰。
防止不一致的问题。

  1. 线程同步

线程同步又可分为相互排斥线程间的通信

相互排斥又可分为以下三类:

  1. 同步方法:

同步方法就是再方法名称前面加上synchronized关键词。同步方法最重要的是可以锁住共享的资源,也就是任何一个线程调用同步方法时,可以自动锁住共享资源,直到这个线程完成工作才会将共享资源释出。

  1. 同步区块:

将需要做同步的程序代码放在同步区块内。

  1. 同步静态方法:

如果将同步应用于静态方法,那么被锁住的资源是类,而不是对象,由于类被锁住了,所以也可以达到同步的效果。
设计同步静态方法非常容易,只要再静态方法前面加上synchronized即可。

死锁:

最常见于 A线程拥有资源a需要资源b,但资源b被B线程锁住,同时B线程拥有资源b需要资源a,而资源a被A线程锁住。

2. 线程内部通信

线程的内部通信机制主要是可以让一个线程再关键时刻先暂停,让另一个线程进入先运行。这时候需要使用wait()、notify()、notifyAll()方法。

**wait()方法:**可以让目前线程释放锁,同时等待其他线程通知notify()或notifyAll(),或是等待时间终了。

**notify()方法:**唤醒等待的线程。

**notifyAll()方法:**将所有等待的线程唤醒。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值