当前位置 : 主页 > 编程语言 > java >

java创建多线程的几种方式

来源:互联网 收集:自由互联 发布时间:2022-07-05
提示 需要注意的是,无论用何种方式创建启动线程,都要给它一个名字,这对排错诊断系统监控有帮助,否则诊断问题时,无法直观知道某个线程的用途. 继承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);
}

@Override
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 {

@Override
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() {
@Override
public void run() {
//任务代码
for (int i = 0; i < 20; i++) {
System.out.println(Thread.currentThread().getName() + ":" + i);
}
}
}.start();

//2.第二种方式 实现方法
new Thread(new Runnable() {
@Override
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);
}
}
}


上一篇:Java多线程之TheadLocal概念 *
下一篇:没有了
网友评论