常用方法
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)