简单理解线程

Posted 微尘chq

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了简单理解线程相关的知识,希望对你有一定的参考价值。

  1. 线程是一个程序里面不同的执行路径
  2. 线程的状态:先创建线程对象,然后调用start()方法进入就绪状态。(但并不是会马上,等到cpu的调度之后进入运行状态,然后可能会运行的时候出问题,进入堵塞状态。也有可能终止了。
  3. 一些常用的方法:

Sleep():指定线程睡眠多长时间

Yield():让出cpu给其他线程

Notify():叫醒线程

Notifyall():叫醒所有线程

Setpriority():设定优先级

join():Thread类的join()方法就是用来设置线程同步的,(在当前线程调用了这个方法后,就要先执行完这个线程再继续原来的线程)

join方法的作用:在A线程中调用了B线程的join()方法时,表示只有当B线程执行完毕时,A线程才能继续执行

 

 

 

 

  1. 实现线程的两种方法:

继承Thread线程类或者实现runnable接口,推荐使用实现接口的方法来实现,因为java不可以多继承。然后再重写他们的Run()方法,这个方法类似struts2里面的execute()方法,都是基类定义好需要在里面实现的。

  1. 线程同步:synchronized(this){

 需要同步的代码块;

}

或者:直接在方法中加上synchronized,创建同步方法。

只有当前代码块运行完其他对象才可以去访问当前的同步快。

需要注意的是:synchronized的有效范围只是他所控制的当前对象或者方法,而其他非synchronized的对象,方法还是可以正常访问的。

  1. 死锁:当一个线程需要某个对象才能执行,但是这个对象被其他的线程给锁住了,并且这个线程需要某个对象才能执行,而刚好被你这个对象给锁住了,就会造成死锁。解决办法就是可以把你要同步的代码块给扩大了。
  2. Wait()sleep()的区别:

首先wait()object类的方法,而sleep()thread类的。Wait()相当于把锁给放开了,别的对象可以访问你原来锁住的部分了,而sleep()却还是锁住,不可以访问。

以上是关于简单理解线程的主要内容,如果未能解决你的问题,请参考以下文章

用于理解 Java 中的多线程的简单任务

线程理解

进程与线程的简单理解

java 线程的简单理解

简单理解线程--阻塞,interrupt

iOS 多线程的简单理解执行方式 + 执行对列 的组合