提示 需要注意的是,无论用何种方式创建启动线程,都要给它一个名字,这对排错诊断系统监控有帮助,否则诊断问题时,无法直观知道某个线程的用途. 继承Thread类 MyThread类 public class MyThr
提示
需要注意的是,无论用何种方式创建启动线程,都要给它一个名字,这对排错诊断系统监控有帮助,否则诊断问题时,无法直观知道某个线程的用途.
继承Thread类
MyThread类
public class MyThread extends Thread {public MyThread() {
}
//private String name;
MyThread(String name) {
//this.name = name;
super(name);
}
public void run() {
for (int i = 0; i < 20; i++) {
/**
* Thread.currentThread() 返回当前线程的引用
* this.getName() 返回当前线程的名字 外部方法怎么setName设置线程名字,内部就可以获取线程名字
*/
System.out.println(this.getName() + " : " + i);
}
}
}public class Main {
/**
* 继承方式实现线程
*
* @param args
*/
public static void main(String[] args) {
MyThread myThread = new MyThread();
myThread.setName("我是main线程");
myThread.run();
}
}
实现Runnable接口
MyTask
public class MyTask implements Runnable {public void run() {
for (int i = 0; i < 20; i++) {
//获取线程名字
System.out.println(Thread.currentThread().getName()+i);
}
}
}
Main方法
public class Main {/**
* 实现方式创建线程
*/
public static void main(String[] args) {
MyTask myTask = new MyTask();
Thread thread = new Thread(myTask);
thread.setName("Runnable");// 设置名字
String name = thread.getName(); //获取名字
boolean interrupted = thread.isInterrupted();//如果这个线程被中断就返回true
// thread.checkAccess();
ClassLoader contextClassLoader = thread.getContextClassLoader();//返回此线程的上下文类加载器
long id = thread.getId();//返回此线程的标识符
int priority = thread.getPriority();//返回线程的优先级
Thread.State state = thread.getState(); //返回线程的状态 , 具体的点State枚举看源码
ThreadGroup threadGroup = thread.getThreadGroup();//返回线程组
boolean alive = thread.isAlive(); //测试线程是否活动
boolean daemon = thread.isDaemon(); //测试线程是否是守护线程
thread.start();
}
}
匿名内部类方式创建
/*** 匿名内部类方式创建
*/
public class Main {
public static void main(String[] args) {
//1.第一种方式 继承方式
new Thread() {
public void run() {
//任务代码
for (int i = 0; i < 20; i++) {
System.out.println(Thread.currentThread().getName() + ":" + i);
}
}
}.start();
//2.第二种方式 实现方法
new Thread(new Runnable() {
public void run() {
for (int i = 0; i < 20; i++) {
System.out.println(Thread.currentThread().getName() + ":" + i);
}
}
}).start();
//主线程代码
for (int i = 0; i < 20; i++) {
System.out.println(Thread.currentThread().getName() + ":" + i);
}
}
}