【Java多线程技术】

线程与进程

进程

是指一个内存中运行的应用程序,每个进程都有一个独立的内存空间

线程

1、是进程中的一个执行路径,共享一个内存空间,线程之间可以自由切换,并发执行. 一个进程最少有一个线程。

2、线程实际上是在进程基础之上的进一步划分,一个进程启动之后,里面的若干执行路径又可以划分成若干个线程。

线程基本使用

在java中线程来使用有两种方法。
1、继承Thread类,重写run方法。
2、实现Runnable接口,重写run方法。

继承 Thread 与实现 Runnable 的区别:
1、从java设计来看,通过继承Thread或者实现Runnable接口来创建线程本质上没有区别,从jbk帮助文档我们可以看到Thread类本身就实现了Runnable接口。
2、实现Runnable接口方式更加适合多个线程共享一个资源的情况,并避免了单继承的限制。

线程终止

1、当线程完成任务后,会自动退出。
2、还可以通过使用变量来控制run方法退出的方式停止线程,既通知方式。

线程常用方法

1、setName //设置线程名称
2、getName //得到线程名称
3、start //使该线程开始执行
4、run //调用线程对象run方法
5、setPriority //更改线程的优先级
6、getPriority //获取线程的优先级
7、sleep //在指定的毫秒数内让当前正在执行的线程休眠(暂停执行)
8、interrupt //中断线程

注意事项和细节

1、start底层会创建新的线程,调用run,run就是一个简单的方法调用,不会重启新线程。
2、线程优先级的范围。
3、interrupt中断线程,但并没有真正结束线程。一般用于中断正在休眠线程。
4、sleep 线程的静态方法,使当前线程休眠。

线程调度

分时调度

所有线程轮流使用 CPU 的使用权,平均分配每个线程占用 CPU 的时间。

抢占式调度

 1、优先让优先级高的线程使用 CPU,如果线程的优先级相同,那么会随机选择一个(线程随机性),Java使用的为抢占式调度。

 2、CPU使用抢占式调度模式在多个线程间进行着高速的切换。对于CPU的一个核新而言,某个时刻,只能执行一个线程,而 CPU的在多个线程间切换速度相对我们的感觉要快,看上去就是 在同一时刻运行。 其实,多线程程序并不能提高程序的运行速度,但能够提高程序运行效率,让CPU的使用率更高。

用户线程和守护线程

1、用户线程:也叫工作线程,当线程的任务执行完或通知方式结束。
2、守护线程:一般是为工作线程服务的,当所有的用户线程结束,守护线程自动结束。
3、常见的守护线程:垃圾回收机制。

线程的生命周期

在这里插入图片描述

线程的同步

Synchronized

线程同步机制
1、在多线程编程,一些敏感数据不允许被多个线程同时访问时,此时可以使用同步访问技术,保证数据在任何同一时刻,最多有一个线程访问,以保证数据的完成性。
2、线程同步,即当有一个线程在对内存进行操作时,其他线程都不可以对这个内存地址进行操作,直到该线程完成操作,其他线程才能对该内存地址进行操作。
3、上锁:当数据被多个线程同时访问时,需要线程拿到唯一的锁时,才能对数据进行操作。

互斥锁

1、java语言中,引入了对象互斥锁的概念,来保证共享数据操作完成性。
2、每个对象都对应一个可称之为“互斥锁”的标记,这个标记用来保证在任一时刻,只能有一个线程访问该对象。
3、关键字Synchronized来与对象的互斥锁联系。当某个对象用Synchronized修饰时,表明该对象在任一时刻只能由一个线程访问。
4、同步的局限性:导致程序的执行效率低。
5、同步方法(非静态)的锁可以是this,也可以是其它对象(要求是同一个对象)。
6、同步方法(静态)的锁为当前类本身。

注意事项和细节

1、同步方法如果没有使用static修饰,默认锁对象:this。
2、如果方法使用static修饰,默认锁对象:当前类.class。

线程的死锁

 多个线程都占用了对方的锁资源,但不肯相让,导致了死锁,在编程是一定要避免死锁的发生。

线程池 Executors

如果并发的线程数量很多,并且每个线程都是执行一个时间很短的任务就结束了,这样频繁创建线程 就会大大降低 系统的效率,因为频繁创建线程和销毁线程需要时间. 线程池就是一个容纳多个线程的容 器,池中的线程可以反复使用,省去了频繁创建线程对象的操作,节省了大量的时间和资源。

线程池的优点

  1. 降低资源消耗。
  2. 提高响应速度。
  3. 提高线程的可管理性。

Java中的四种线程池 . ExecutorService

  1. 缓存线程池
    在这里插入图片描述

  2. 定长线程池
    在这里插入图片描述

  3. 单线程线程池
    在这里插入图片描述

  4. 周期性任务定长线程池
    在这里插入图片描述

同步与异步

同步

同步:排队执行 , 效率低但是安全.

异步

异步:同时执行 , 效率高但是数据不安全.

并发与并行

并发

并发:指两个或多个事件在同一个时间段内发生。

并行

并行:指两个或多个事件在同一时刻发生(同时发生)。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值