这几天对线程进行了一定的学习和了解,下面对线程的一些基本知识进行一下总结
一.线程的创建
1. 继承Thread类
public Class MyThread extendws Thread{ public void run(){ //线程体 } }
2.实现Runnable接口
public MyThread implements Runnable{ public void run(){ //线程体 } }
3.创建内部类线程
new Thread(){ public void run(){ //线程体 } }.start()
二.线程生命周期
线程生命周期的五种状态:创建线程--就绪--运行--阻塞--消亡
具体转换如下图:
三.线程同步
线程同步是为了防止多线程对同以数据访问时对数据造成破坏
举例说明:
假如我的银行账户里有5000元钱。我有存折和银行卡两种取钱工具。在同一时候两人分别拿着这两种工具去银行取同一账户的钱。如果不实行线程同步,则可能取出10000元。线程同步就是当银行卡在取钱时,存折就不能取,存折取时银行卡就不能取。
实现线程同步常用的方法是加同步锁:
synochored(){//同步块}
synochored(obj){//代码}
四.线程池
我们知道在计算机中往往是很多个线程在运行,然而每创建一个线程都要消耗一定资源的,如果我们每执行一个任务就创建一线程的话必然会占用很多内存,当达到一定限度时我们的CUP就会崩溃的。因此我们会用到线程池。
线程池相当于一个存放线程的容器,当线程池里存在空闲线程时,启动线程执行任务。否则就等待。这样就可以用有限的线程执行更多的任务,大大减少了资源开销。
五.线程常用方法
CurrenThread() //获取当前线程对象名
sleep(long n) //线程休眠n毫秒
getName() //获取线程名
inturrept() //中断线程
destroy() //终止线程 (一般run()方法执行完后线程消亡)