天天看点

多线程基础笔记小结

多线程的意义:提高程序的使用率,cpu的利用率

实现线程的几种方式

继承thread类

重写run方法

通过start调用启动

- 建一个类,继承thread类,重写run方法。

- 在另一个类里把刚才那个类new出来,调用对象的start方法

- 这是一个线程 多个线程的话要new多个对象出来 同时调用start方法

实现runnable接口

重写run

把该类作为参数传到thread里

通过start调用

- 建一个类,实现runnable接口,重写run方法

- 在另一个类里把刚才的类new出来,再new一个thread类出来,将刚才的对象放在thread对象内

- 要开多个线程的话就new多个thread对象

- 通过thread对象的start方法来运行线程

开发中一般用第二种:

避免java单继承的局限性

适合多个相同程序代码处理同一个资源的情况

线程的命名

通过setname方法来设置名字

(继承thread类)在类中写一个构造方法,传一个string对象(名字)进去,构造方法内用super调用

thread类的有参构造

(实现runnable接口)在newthread的时候,将对象和线程的名字两个都传进去。

run和start的区别

run:仅仅封装被线程执行的代码,直接调用的话相当于普通方法

start:首先启动一个线程,通过jvm调用run方法

优先级 setpriority()

优先级越高,抢到的概率越高,并不是高的一定能抢到

1~10的整数,默认是5

放在start之前

休眠 sleep()

加入线程 join() 会把当前线程执行完 再执行其他线程

**线程礼让 yeild() **让当前运行状态的线程释放自己的cpu资源,从运行状态变为就绪状态,然后重新和其他线程抢资源 礼让不一定成功 当线程转为就绪状态时,抢到cpu,从中断位置继续执行

守护线程(后台线程) setdaemon(true)

当所有非守护线程死亡后守护线程也会死亡,由于设备延迟,守护线程会运行一小段再死亡

中断线程

stop()太暴力 不建议使用

interrupt() 只能改变当前线程的状态为中断(true),并不能中断一个正在运行的线程,在这个基础上进入阻塞状态(sleep,wait,join),就会抛出interruptedexception,中断状态被清除,重新设置为false,线程退出。 无论是先中断还是先阻塞都能达到停止线程的目的。

this.interrupted()方法 测试当前线程是否中断(静态),会返回上一次的中断状态,并且会清除该状态,连续调用两次,第一次返回true,第二次返回false。

this.isinterrupted()方法 测试当前线程是否中断,但是不会清除当前状态。

继续阅读