天天看点

java 线程api_Java线程常用API

常用方法

getName setName getPriority isAliive join sleep...

* @author 作者 E-mail:

* @version 创建时间:2020年7月5日 下午10:30:34

* 类说明 线程常用API

*/

class ThreadDemo4Test extends Thread{

public void run() {

//Thread.currentThread() 获取当前线程

System.err.println("当前线程名称:" + Thread.currentThread().getName());

}

}

public class ThreadDemo4 {

public static void main(String[] args) {

ThreadDemo4Test t = new ThreadDemo4Test();

// setName 可设置线程名称 getName 可获取线程名称

t.setName("重新设置名称");

System.err.println(t.getName());

// getId 获取线程唯一标识ID

System.err.println(t.getId());

// getPriority 获取线程优先级

// 线程优先级为 1-10 默认为5

System.err.println(t.getPriority());

// MAX_PRIORITY 最高优先级(10) MIN_PRIORITY 最低优先级(1) NORM_PRIORITY 默认优先级(5)

t.setPriority(Thread.MAX_PRIORITY);

t.setPriority(Thread.MIN_PRIORITY);

System.err.println(t.getPriority());

t.start();

}

}

class ThreadDeom5Test extends Thread{

public void run() {

// 进入run方法 必然代表线程正在使用

System.err.println("线程是否正在使用:" + this.isAlive());

}

}

public class ThreadDemo5 {

public static void main(String[] args) {

Thread t = new ThreadDeom5Test();

//只是创建了一个线程并未开发,所以这里必然是false

System.err.println("线程是否正在使用:" + t.isAlive());

t.start();

}

}

* @author 作者 E-mail:

* @version 创建时间:2020年7月5日 下午10:50:36

* 类说明 join方法的使用

*/

class Runnable6Test implements Runnable{

@Override

public void run() {

for(int i=0; i<10; i++) {

System.err.println(Thread.currentThread().getName() + ":" +i);

}

}

}

public class ThreadDemo6 {

public static void main(String[] args) {

Thread t = new Thread(new Runnable6Test());

t.start();

for (int i = 0; i < 20 ; i++) {

if (i >10) {

try {

//在main线程中,当i > 10,会强制运行t线程,直到t线程执行完毕,再执行main线程

t.join();

} catch (InterruptedException e) {

e.printStackTrace();

}

}

System.err.println(Thread.currentThread().getName() + ":" +i);

}

}

}

* @author 作者 E-mail:

* @version 创建时间:2020年7月5日 下午11:01:14

* 类说明 sleep的使用 创建一个线程 每隔一秒打印一次系统时间 十秒后关闭

*/

class RunnabelTest7 implements Runnable{

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");

private Boolean flag = true;

public Boolean getFlag() {

return flag;

}

public void setFlag(Boolean flag) {

this.flag = flag;

}

@Override

public void run() {

while (flag) {

Date date = new Date();

System.err.println(sdf.format(date));

try {

Thread.sleep(1000);

} catch (InterruptedException e) {

e.printStackTrace();

}

}

}

* @author 作者 E-mail:

* @version 创建时间:2020年7月5日 下午11:16:12

* 类说明 interrupt()/stop() 方法的使用

*/

class ThreadDeom8Test extends Thread{

public void run() {

try {

//让线程休眠十秒钟

Thread.sleep(10000);

} catch (InterruptedException e) {

e.printStackTrace();

}

System.out.println("名称:" + this.getName());

}

}

public class ThreadDemo8 {

public static void main(String[] args) {

ThreadDeom8Test t = new ThreadDeom8Test();

t.start();

try {

//线程等待2秒,打断子线程的睡眠

Thread.sleep(2000);

} catch (InterruptedException e) {

e.printStackTrace();

}

//打断子线程的睡眠,继续执行睡眠之后的语句

// t.interrupt();

//终止子线程的执行,睡眠之后的语句不会被执行

t.stop();

}

}

PS:当执行interrupt方法打断线程睡眠时会有正常的异常抛出,但是不影响不包含在异常处理块以外的代码执行

java.lang.InterruptedException: sleep interrupted

at java.lang.Thread.sleep(Native Method)名称:Thread-0

at com.study.demo.thread.ThreadDeom8Test.run(ThreadDemo8.java:11)