1、静态方法
static void sleep(long millis) //睡眠线程
static void yield() //礼让线程(“就是客气客气,不一定真让”)
代码示例:
void main(){
Thread.sleep(1000);
}
当前线程(main线程)进入阻塞状态,让出CPU时间片给其他线程,时间到期,当前线程继续执行;在同步代码中,不会释放当前线程持有的锁;
void main(){
Thread.yield();
}
当前线程返回就绪状态,让出CPU时间片,但不保证其他线程一定能抢到CPU时间片(因为线程调度器可能会忽视这个CPU时间片);在同步代码中,不会释放当前线程持有的锁;
2、常规方法
String getName() //返回该线程的名称。
void setName(String name) //改变线程名称,使之与参数 name 相同。
int getPriority() //返回线程的优先级。
void setPriority(int newPriority) //更改线程的优先级。
void setDaemon(boolean on) //将该线程标记为守护线程或用户线程。
boolean isDaemon() //测试该线程是否为守护线程
void interrupt() //中断线程
void join() //其他线程等待该线程终止
void run() //线程体,线程执行的具体内容,本质只是Thread类的一个普通方法
void start() //启动线程,进入就绪状态,等待CPU时间片
代码示例:
new Thread(new Runnable() {
@Override
public void run() {
SimpleDateFormat format=new SimpleDateFormat("hh:mm:ss");
//输出系统时间的时分秒。每隔一秒显示一次。可能会出现跳秒的情况,因为阻塞1秒过后进入runnable状态,等待分配时间片进入running状态后还需要一点时间
while(true){
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(format.format(new Date()));
}
}
}).start();
run方法:定义线程体,即线程执行的具体内容,本质只是Thread类的一个普通方法;
start方法:启动线程,进入就绪状态,等待CPU时间片;
3、继承Object的方法
void wait()
void notify()
void notifyAll()
说明:
同步代码中,使用wait/notify,保证线程同步;
wait方法会释放当前线程持有的锁;当前线程进入阻塞状态;
notify方法会使当前线程获取锁;当前线程返回就绪状态;
4、深入源码