多线程内容

目录

简单的线程介绍

并发和并行

 创建线程三种方法

1、继承Thread类:

2、实现Runnable接口(常用):

3、实现Callable接口:

几个常用API:

Thread currentThread()

getName()

setPriority(int priority)

run()

start()

sleep():

yieid():

wait():

join():

线程同步

用synchornized和lock实现同步

死锁

线程池


简单的线程介绍

进程:把进程比喻成一个工厂的厂房。

线程:把比喻成流水线。

任务就是在流水线上面需要做的工作

并发和并行

并发:在一个时间段里面有多个线程在运行,要注意是交互运行不是同时运行。

并行:在同一个时刻有多个线程在运行。

 创建线程三种方法

1、继承Thread类:

重写run()方法,为单继承

2、实现Runnable接口(常用):

重写run()方法,可以实现多个接口,实现资源共享

3、实现Callable接口:

配合FutureTask类,可以有返回值。

几个常用API:

Thread currentThread()

返回当前线程

getName()

获得线程的名称

setPriority(int priority)

设置线程的优先级

run()

是一个普通方法不能启动线程

start()

会开辟一个新的栈空间,让当前栈属于就绪状态抢到时间片之后分配栈空间开始执行。

sleep():

让线程进入睡眠阻塞状态,时间到之后自动唤醒变为就绪状态。

yieid():

线程礼让,暂停当前线程的执行,让出时间片,回到就绪状态wait()和 sleep()的区别:

wait():

是Object类中的方法,用在同步锁的代码中,线程等待(挂起,阻塞)释放锁,要手动才能唤醒。

join():

等待其他线程终止。在当前线程中调用另一个线程的join()方法,则当前线程转入阻塞状态,直到另一个进程运行结束,当前线程再由阻塞转为就绪状态

线程的五个状态:

1、新建状态

2、就绪状态:线程抢到时间片之后

3、运行状态

4、阻塞状态

5、死亡状态

线程同步

线程同步:即当有一个线程在对内存进行操作时,其他线程都不可以对这个内存地址进行操作,直到该线程完成操作,其他线程才能对该内存地址进行操作。

可以解决线程同步数据安全的问题。但是比较耗费资源,降低了效率。

synchornized和lock实现同步

synchronized关键字:

同步代码块,同步实例方法,同步静态方法,自动解锁,jdk1.6在之后对synchronized进行了优化,性能得到了提升。用法:同步代码块,同步实例方法,同步静态方法
Lock:接口,提供的有各种实现类,手动的加锁和解锁,使用try和finally,性能更好,灵活性更高

死锁

当多个线程各自占有一些共享资源,并且互相等待其他线程占有的资源才能进行,从而导致两个或者多个线程都在等待对方释放资源,都停止执行的情况。

线程池

多线程运行时,系统不断创建和销毁新的线程,成本非常高,会过度的消耗系统资源,从而可能导致系统资源崩溃,使用线程池就是最好的选择

ThreadPoolExecutor pool1 = new ThreadPoolExecutor(1、2、3、4、5、6、7)

1:核心线程数
2:最大线程数:一般和核心线程数一致
3:闲置线程的存活时间:数字
4:时间单位
5:任务队列:阻塞队列
6:线程工厂:创建新线程的方式,使用默认工厂
7:拒绝策略:默认,抛出异常

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值