java多线程(韩顺平老师讲义)

多线程(韩顺平)

进程:正在运行的程序

加载到内存里

线程是进程的实体,线程也可以由线程创建

单线程:同一时刻只能有一个线程

并发:同一时刻多个任务交替执行

1,继承Thread类(这个类也是实现runable接口

run()方法是普通方法,没有启动新的线程

接口是一个规范

我知道你的方法名,

我才知道找什么去调用什么

[1] native 本地方法start0() 底层C/C++实现

start0()==>线程可用,具体什么时候run。不知道等CPU调度。

A类已经继承了B类,这就不能继承Thread类就只能通过实现runable接口。让这个对象的run方法可以多线程执行。

对于接口的理解:

实现了这个接口,有运行这个接口的能力;

就是说我这个接口里定义的方法你都能实现(除非是抽象类)。既然我的方法你都能实现,那你就是我的好兄弟,就可以说你是我这个类的。那你通过代理模式传进来的时候我就验证你有没有实现runable这个接口,如果实现了就是可以帮你找房子(实现代理模式),用来启动多线程。

Thread类实现多线程,传进来一个实现了runable接口的对象,经过判断对他进行代理。为这个对象添加启动start0()的方法。

代理模式。只要这个被传进来这个可以实现。就来实现。

两个thread都可以在执行T3(实现runable接口)

两个线程共享资源

线程的退出

1,运行结束自动退出

2,变量去通知{通过一个set方法}

intrrupt中断 只能叫醒sleep的,

yeild礼让,当前线程调用当前对象的yeild方法,可以降低当前线程的优先级

jion,让别的线程来插队

守护线程:主线线程结束了,自动结束不用特意通知。

.setDeamon(true)

.start()

JDK Thread.state

等待代码块的锁===>bloked

wait()

join()

LockSupport.park()====>Waiting

runable(){ ready running}

下面是线程的几个状态:

[new]刚开始创建还没有.start()方法

[runable]可运行状态,内部又分为readyruning这个由CPU调度或者礼让函数等

[TimeWaiting]sleep(时间),wait(时间)

[Wating]waitvoid

[Blocked]加锁

[Timinated]结束运行的了

同步:敏感数据在任何同一时刻,数据只能被一个线程访问。【对这个内存地址进行操作】

Synchronized非公平锁 (自己抢谁抢到算谁的)

1,代码块Synchronized(对象){

同步代码块

}

2,方法限制 public Synchronized void fun(){

同步代码块

}

互斥锁

 同步的局限性:降低程序的执行效率;

这个票数的数据

非静态:加载当前对象

静态:加载类上

三个线程共享这一个 object

同步代码快执行结束,自动释放锁。

当前线程遇到break,return,释放锁。

出现未处理的异常,error,释放。

执行wait方法释放锁。

线程执行时调用sleep(),yield()不会释放锁

线程被挂起suspend

Suspend(),resume()不要用

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值