简单理解线程
Posted 微尘chq
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了简单理解线程相关的知识,希望对你有一定的参考价值。
- 线程是一个程序里面不同的执行路径
- 线程的状态:先创建线程对象,然后调用start()方法进入就绪状态。(但并不是会马上,等到cpu的调度之后进入运行状态,然后可能会运行的时候出问题,进入堵塞状态。也有可能终止了。
- 一些常用的方法:
Sleep():指定线程睡眠多长时间
Yield():让出cpu给其他线程
Notify():叫醒线程
Notifyall():叫醒所有线程
Setpriority():设定优先级
join():Thread类的join()方法就是用来设置线程同步的,(在当前线程调用了这个方法后,就要先执行完这个线程再继续原来的线程)
join方法的作用:在A线程中调用了B线程的join()方法时,表示只有当B线程执行完毕时,A线程才能继续执行
- 实现线程的两种方法:
继承Thread线程类或者实现runnable接口,推荐使用实现接口的方法来实现,因为java不可以多继承。然后再重写他们的Run()方法,这个方法类似struts2里面的execute()方法,都是基类定义好需要在里面实现的。
- 线程同步:synchronized(this){
需要同步的代码块;
}
或者:直接在方法中加上synchronized,创建同步方法。
只有当前代码块运行完其他对象才可以去访问当前的同步快。
需要注意的是:synchronized的有效范围只是他所控制的当前对象或者方法,而其他非synchronized的对象,方法还是可以正常访问的。
- 死锁:当一个线程需要某个对象才能执行,但是这个对象被其他的线程给锁住了,并且这个线程需要某个对象才能执行,而刚好被你这个对象给锁住了,就会造成死锁。解决办法就是可以把你要同步的代码块给扩大了。
- Wait()和sleep()的区别:
首先wait()是object类的方法,而sleep()是thread类的。Wait()相当于把锁给放开了,别的对象可以访问你原来锁住的部分了,而sleep()却还是锁住,不可以访问。
以上是关于简单理解线程的主要内容,如果未能解决你的问题,请参考以下文章