重写run方法
public void run(){
}
继承Thread类
使用方法:
new MyThread().start()
或
MyThread t=new MyThread();
Thread tt=new Thread(t);
tt.start();
说明:
- Thread类有sleep方法,伴随InterruptedException
- setName方法设置线程名,可用getName获取
- 设置线程名法二:Thread tt=new Thread(t,name:);
- Thread的currentThread()方法获取当前的线程的实例对象
- thread.setDaemon(true);设置为后台线程
实现Runnable接口
MyThread t=new MyThread();
Thread tt=new Thread(t);
tt.start();
线程优先级
线程的优先级用1~10之间的整数表示,数字越大优先级越高,Thread类的setPriority()方法进行设置,setPriority()方法中的参数newPriority接收的是1~10之间的整数或者Thread类的三个静态常量。
线程插队
Thread.join()等待插入的线程指定时间过后才会继续执行其他线程。
Thread.join(long millis)等待插入的线程指定时间过后才会继续执行其他线程。
线程让步
通过yield()方法可以实现线程让步,让当前正在运行的线程失去CPU使用权,让系统的调度器重新调度一次,由于JVM默认采用抢占式调度模型,所有线程都会再次抢占CPU资源使用权,所以在执行线程让步后并不能保证立即执行其他线程,CPU可能会有一段空闲时间。
线程中断
public void interrupt():表示中断当前线程对象。每个线程对象都是通过一个标志位来判断当前是否为中断状态。
public boolean isInterrupted():表示用来获取当前线程对象的标志位的。该方法有true和false两个返回值,true表示清除了标志位,当前线程对象已经中断;false表示没有清除标志位,当前对象没有中断。
线程同步
同步块
synchronized(Object lock){
}
同步方法
synchronized function(){}
被synchronized修饰的方法在某一时刻只允许一个线程访问,访问该方法的其他线程都会发生阻塞,直到当前线程访问完毕后,其他线程才有机会执行。
线程通信
wait()、notify()和notifyAll()方法的调用者都应该是同步锁对象,如果这三个方法的调用者不是同步锁对象,Java虚拟机就会抛出IllegalMonitorStateException异常。
synchronized(Object lock){
lock.wait();
}
synchronized(Object lock){
lock.notify();
}