[总结] 第十四章 线程

线程

一个线程是进程内部的分支 。线程是共享一个进程的内存空间。

Thread 类 (线程)

1.写一个类继承Thread类,重写run();方法,

2.new 出这个类

3.调用这个类的start()方法,开启线程,该方法会为线程分配资源,然后自动调用this,run()方法,如果直接调用run方法不会报错,但只是普通的方法调用而已,并没有开启线程

第二种方式(如果一个类继承了一个父类):

runnable 接口,

1.写一个类实现runnable接口,重写run()方法。

2.先new 出这个类,在new 出thread 线程。

3.将线程接口传给thread 线程,再使用thread的start方法。

造成线程中断的五个状态:

1.z中断状态:cpu 执行其他线程没有执行本线程时,被执行的几率分为优先级(共10级),使用.setpriorty()方法

2.阻塞状态:由于输入输出造成的线程中断状态。

3.休眠状态:主动调用sleep()方法,给他一个毫秒数,在这个时间之后执行。

4.d等待状态:在object中的wait方法和notify 方法,等待和唤醒一般搭配使用。

5.挂起状态:强制将一个线程退出,yield()方法。

线程同步(synchronized)同步锁

当有时两个或多个线程可能会试图同时访问一个资源,在此情况下,数据可能会变的不一致,为了确保任何一个时间点共享的资源只被一个线程使用,便使用了“同步”,使用同步关键字 synchronized 作为标识。

t同步的第一种实现:

同步方法,在资源身上加同步关键字synchronized

t同步的第二种实现:在调用资源的线程上用synchronized 同步块,

列:synchronized (this.rs){
  this.rs.show(this.getName)();}

注意:包装类作引用类型传参时,会产生一个新的包装类对象,其效果与基本类型数据无异。

扩展:死锁

当两个线程同步同一资源两个功能,并且两个功能有相互依赖关系时。便成了死锁,这时便需要调用object的wait()和notify()方法。

原文地址:https://www.cnblogs.com/jrc2016/p/6250162.html