线程
一个线程是进程内部的分支 。线程是共享一个进程的内存空间。\n
Thread 类 (线程)
1.写一个类继承Thread类,重写run();方法,\n
2.new 出这个类\n
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)();}
注意:包装类作引用类型传参时,会产生一个新的包装类对象,其效果与基本类型数据无异。\n
扩展:死锁
当两个线程同步同一资源两个功能,并且两个功能有相互依赖关系时。便成了死锁,这时便需要调用object的wait()和notify()方法。