多线程

多线程的定义:

​ 一个程序运行即一个进程,一个进程可以有多个线程,多线程并非多个线程并行在CPU中,而是多个线程分别占据CPU不同的时间段,交替执行,顺序与优先级有关。

线程类:

​ Thread类

得到主线程对象:

​ Thread t=Thread.currentThread();

创建线程类方式:

​ ①继承Thread类、重写run()方法(线程的执行体,执行的内容)

​ 优点:编写简单,便于直接操作,适用于单继承

​ ②实现Runnable接口、实现run()方法、【作为Thread类的参数被使用】

​ 优点:避免单继承局限性、便于共享资源

启动线程:

​ start()方法,使用之后处于等待CPU分配时间段的就绪状态,分配到之后开始运行为运行状态

线程状态:

​ ①创建状态:未调用start()方法之前,可以修改线程信息、内容

​ ②就绪状态:调用start()方法之后,等待获取CPU片段,转为运行状态

​ ③运行状态:因等待文件、用户输入、线程休眠等,随时可能转为阻塞状态因释放CPU,转入就绪状态

​ ④阻塞状态:阻塞解除,立刻转入就绪状态

​ ⑤死亡状态:线程自然执行完毕,或外部干涉终止线程,转入死亡状态

线程调度的常用方法:

​ 更改优先级:setPriority(int类型数字,代表优先级高低,1最低,10最高)

​ Thread.MAX_PRIORITY【最高优先级】

​ Thread.MIN_PRIORITY【最低优先级】

​ 休眠方法:【静态】sleep(long类型,表示休眠时间,单位毫秒)

​ 强制暂停:join()【加队,强制暂停其他线程,等调用此方法的线程执行完毕,才能继续执行,有重载带 参的方法】

​ 线程礼让:yield()【静态,暂停当前线程,允许其他相同优先级的线程获得运行机会,当前线程转为就绪 状态,不转为堵塞状态,只提供一种可能,不保证一定礼让成功】

​ 中断线程:interrupt()

​ 线程检查:isAlive()【测试线程是否处于活动状态】

线程不安全:

​ 当多个线程共享同一资源时,一个线程未完成操作的时候,其他线程修改数据,会造成数据不安全问题。

线程同步:

​ 同步方法:使用synchronized修饰的方法进行对类成员变量的访问。相当于上一把锁,当前线程操作未 完成时,其他线程不得进入。

​ 同步代码块:synchronized(syncObject){}与同步方法类似,将可能引起线程不安全的代码片段用sync hronized的关键字修饰,syncObject为需同步的对象,一般为this。

​ 注意:同一时刻,只能有一个线程访问synchronized(this)代码块,其他线程的synchronized(this)代码块 处于锁定状态,但其他线程可以访问非synchronized(this)代码块,此特性也适用于同步方法。

​ 死锁:

​ 两个线程都在等待对方先完成,造成程序的停滞。

​ 产生条件:

​ 两个或两个以上的线程在活动。

​ 某个线程拿到一个锁以后,还想拿第二个锁,造成锁的嵌套。

线程安全类型:

方法是否同步效率比较使用场景
线程安全多线程并发共享资源
非线程安全单线程

线程间通信:

Object类中有关于线程操作的方法,wait()和notify()。

wait():挂起当前线程,并释放共享资源锁

notify():随机使一个因调用该对象wait()方法挂起的线程解除阻塞,但需要等到获得锁才能执行。

可以在其子类中直接调用:super.wait();、super.notify();

线程池:

线程池所在的包:java.util.concurrent

顶级接口:Executor

真接口:ExecutorService

实现类:AbstractExecutorService

注:java.util.concurrent.Executors类,提供创建线程池的静态方法。

方法名说明
newCachedThreadPool();创建一个可缓存的线程池,有任务时才创建新的任务
newSingleThreadExecutor();创建一个单线程池
newFixedThreadPool(int nThreads);创建一个固定长度的线程池,空闲线程会一直保留。参数为线程数
newScheduledThreadPool(int corePoolSize);创建一个固定长度的线程池,而且以延迟或定时的方式来执行任务

自定义线程池:ThreadPoolExecutor类

​ 构造器中各个参数的含义:

​ corePoolSize:核心池大小

​ maximumPoolSize:线程池最大线程数

​ keepAliveTime:表示线程没有任务时最多保持多久时间会终止

​ unit:参数keepAliveTime的时间单位

​ workQueue:一个阻塞队列,用来存储等待执行的任务

​ threadFactory:线程工厂,主要用来创建线程

​ handler:表示当拒绝处理任务时的策略

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值