一、线程实现的两种方式
线程实现的两种方式:
1)直接继承Thread类,实现线程
使用方法:
public class MyThread extends Thread{
代码块}
Thread t = new MyThread()
t.start
2)实现Runnable接口
使用方法:
public class MyRunnable implements Runnable{
代码块}
MyRunnable mr = new Runnable()
Thread t = new MyThread(mr)
t.start
注:不管是在Thread类里面还是在Runnable接口里面,都有一个run方法,但是启动线程并不是靠调用run方法,而是在外部使用start方法
二、线程的休眠
public static void sleep(long millmils)
使用此方法,让线程休眠进入休眠,即让线程暂停指定时间,释放资源,给其他线程使用,线程休眠不会丢失显示器的所有权
存在的异常:
IllegalArgumentException:当休眠时间为负数,抛出此异常
当线程中断此线程,抛出此异常,中断被清除
三、join与中断线程
join:等待这个线程死亡,即等待调用此方法的线程执行完毕,其他线程才会继续执行
中断线程:public void interrupted()
强行让线程暂停执行,当该线程进入休眠时,外部的中断无效,只有自己调用的中断方法才会使得中断执行
四、守护线程
public static void setDaemon(boolean b):将一个线程标记为守护线程
当进程中剩下的唯一一个线程是守护线程时,JVM会退出程序
public static void yield():调用此方法时,会暂停此线程,执行其他线程
五、线程同步
在一个进程中只有一个资源时,有可能会使得多个进程共享一个资源
为了解决共享问题,引入线程同步问题
线程同步问题:
在一个时间段,最多只能有一个线程访问该资源,然后将该资源锁住,直到该线程释放资源,其余线程才能访问
同步的方法:
1)代码块
synchronized(要同步的对象,可以使用直接使用this表示){
同步的操作
}
2)同步方法
public synchronized void method(){
要同步的操作
}
3)Lock
Lock是一个接口,其实现类是ReentrantLock
注:
1、尽量保证代码简洁,将对线程同步没有作用的代码移除作用区域
2、不要阻塞
3、在持有锁的时候,不要访问其他对象
4、多线程具有安全问题,同步操作能解决安全问题,但是会牺牲性能