多线程小笔记

多线程

多线程并不能提高程序的运行速度,但是能够提高程序运行效率,让cpu的使用率更高。

进程与线程

进程:是一个内存中运行的应用程序
线程:是进程中的一个执行路径,线程有自己的栈空间

同步与异步(线程安全和不安全)

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

并发与并行

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

实现Runnable与继承Thread相比有以下优势:

1、通过创建任务,然后给线程分配的方式来实现多线程,更适合多个线程同时执行相同任务的情况。
2、可以避免单继承所带来的局限性。
3、任务与线程本身分离,提高了程序的健壮性。
4、线程池技术,接收Runnable类型的任务,不接受Thread类型的线程。

线程等待和线程阻塞(也称为耗时操作)

Interrupt()方法:
如果调用了相关的能触发InterruptedException的方法,程序会检查是否有Interrupt()方法标记,如果有则进入异常,然后在异常中通过return进行停止操作

守护线程

调用setDaemon(true)转为守护线程,随被守护线程的死亡而死亡

线程安全(三种方式):

1、synchronize代码块,指定同一把锁,实现同步
2、synchronize方法,在方法返回类型前声明,实现同步方法
3、显式锁,建立Lock对象,自己在指定位置添加上锁和解锁方法,实现同步。

公平和非公平锁

Lockl=newReentrantLock(true);参数为true(默认为false),表示是公平锁,先到先得

多线程通信问题:生产者和消费者

This.notifyAll() 唤醒其他线程
This.wait() 当前线程休眠

当生产者生产时,不让消费者消费
当消费者消费时,不让生产者生产,这样才不会导致线程错乱,线程之间有序排队进行。

线程六种状态

NEW 线程刚创建还未启动
RUNNABLE 运行
BLOCKED 阻塞
WAITING 无期限等待
TIMED WAITING 计时等待
TERMINATED 已退出线程的状态

java线程的三种实现方式:

1、继承Thread,创建线程
2、创建任务对象(实现Runnbale),加入线程中
3、带返回值的线程Callable
Callable<> c =newMyCallable();
FutureTask<> futureTask = new FutureTask<>(c);
newThread(futureTask).start();
futureTask.isDone() 判断线程是否执行完毕
futureTask.cancel(); 取消任务

四种线程池

1、缓存线程池

ExecutorService es = Executors.newCachedThreadPool();
长度无限制。
先判断池中是否有空闲线程,存在则使用,不存在则创建线程并放入池中,然后使用。

2、定长线程池

ExecutorService es = Executors.newFixedThreadPool(2);

3、单线程线程池

ExecutorService es = Executors.newSingleThreadExecutor();

4、周期定长线程池

先判断池中是否有空闲线程,存在则使用,不存在空闲线程,且线程池未满的情况下,则创建线程并放入池中,然后使用。
(1)定时执行一次
ScheduledExecutorService es = Executors.newScheduledThreadPool(2);
es.schedule( new Runnable(){} ,定时多长时间的数字 ,定时的时间单位TimeUtil.SECONDS)

es.scheduleAtFixedRate( new Runnable(){}
,延迟多长时间
,周期运行的间隔数字
,定时的时间单位TimeUtil.SECONDS)

lambda表达式

()->
只保留匿名的方法体和它的参数线程
在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值