Java学习(7):多线程之Tread类

一,Thread类:是多线程最基础的类之一,里面的start()方法是启动新的线程的方法.很多Java中继承Thread类的实现类或者实现Runnable接口的类都通过该方法启动线程,让cpu分配资源调用该线程的run方法.下面将详细介绍Thread类的构成,和实现原理,由于该类好多方法是Native本地方法,是jvm底层去实现的(一般是Java语言无法实现通过c语言实现的)我能只能去理解这些本地方法的作用了.

二,Thread的构造器:从构造器中可以看出,最终通过init方法初始化的,参数是:Runnable,ThreadGroup(线程组),线程名称,stackSize(堆栈的空间大小),线程的上下文对象(个人百度的理解,一般这个值都是空).



1,init方法会把响应的值赋值给Thread类里面的私有参数,这只是其中部分,有兴趣可看源码


二,Thread的run()方法:从源码中可以看出,如果是重写run方法的,则不执行里面的内容,没有重写的话,就执行方法体里的内容,

是传入接口Runnable的run方法.

三,Thread类的本地方法:

看过Thread类的源码后,你会发现里面和线程相关的功能实现,几乎都是本地方法,通过底层的c来实现线程的启动,调用,信息的获取,线程的终止等,所以具体的实现我占时只是理解到该方法的功能.本地方法怎么通过c去调用线程,怎么和CPU交互的,我不清楚.



四,Thread的interrupt()方法:终止状态方法,即:该方法不会终止线程的正常运行,而是去终止线程正在等待的状态包括,sleep,wait,join这三种状态.举例:当A线程的run方法里执行了wait方法或者另外连个方法,导致线程处在等待状态,而B线程中调用了A线程的interrupt()方法,那该现象立马会取消wait的状态.但是取消的形式是抛出异常,InterruptedException,所以在使用时需要再catch中进行相应的异常处理逻辑.

五,终止线程的方法:

1,线程正常执行完run()方法,线程会自动终止.

2,Thread的stop()方法:强制终止,相当于关闭电源形式,这样造成的影响很多是无法预估的.底层运行的是Java的本地方法,所以无法知晓实现原理.

3,Thread的interrupted()终止状态的方法.该方法如前所说,它只是让在等待状态下的线程重新去运行,然后正常执行完run()方法,线程在自动终止.

六:Thread的jion()方法实现原理:

第一步:由源码可以看出jion方法底层是通过调用wait()方法使得两个线程实现同步的.


第二步:当jion进来的A线程执行完后,A线程会调用A线程的exit()方法,该方法是线程执行完,做自我清理的方法,以便于Java垃圾回收.exit()方法里又执行了ThreadGroup的threadTerminated()方法.通过源码可以看出,该方法里最后会执行notifyall方法.唤醒所有等待的线程.这样之前wait()的线程又开始执行了.

总结:通过上述两步的,jion方法实现了不同线程的同步.原理就是wait()和notifyall()方法.



七:Thread的yield方法():该方法是本地方法,无法通过源码去分析实现过程.它的主要作用是:是该线程放弃正在运行的机会,让cup重新分配运行(意味着该线程又重新回到待运行状态,和其他线程都有机会进入运行状态).

八,Java的wait()和notify()

wait()方法与notify()必须要与synchronized(resource)一起使用。也就是wait与notify针对已经获取了resource锁的线程进行操作,从语法角度来说就是Obj.wait(),Obj.notify必须在synchronized(Obj){...}语句块内。从功能上来说wait()线程在获取对象锁后,主动释放CPU控制权,主动释放对象锁,同时本线程休眠。直到有其它线程调用对象的notify()唤醒该线程,才能继续获取对象锁,并继续执行。相应的notify()就是对对象锁的释放操作。


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值