其他
一个Java多线程的问题,颠覆了我多年的认知!
The following article is from 编码之外 Author 庆哥
碰见个奇怪的多线程问题
Java创建多线程的方式有哪几种啊?
继承Thread类 实现Runnable接口
Java中创建多线程的方法有且仅有一种,那就是new Thread的方式
一般这问题都是怎么问的
创建线程的方式有且只有一种,那就是new Thread的方式
难道我之前学的都是错的
@Override
public void run(){
System.out.println("实现Runnbale的方式……");
}
}
public static void main(String[] args) {
//获取线程数
ThreadGroup threadGroup = Thread.currentThread().getThreadGroup();
while(threadGroup.getParent() != null){
threadGroup = threadGroup.getParent();
}
int totalThread = threadGroup.activeCount();
System.out.println("当前线程数:"+totalThread);
}
}
public static void main(String[] args) {
//获取线程数
ThreadGroup threadGroup = Thread.currentThread().getThreadGroup();
while(threadGroup.getParent() != null){
threadGroup = threadGroup.getParent();
}
int totalThread = threadGroup.activeCount();
System.out.println("当前线程数:"+totalThread);
}
}
class MyThread implements Runnable{
@Override
public void run(){
System.out.println("实现Runnbale的方式……");
}
}
public static void main(String[] args) {
Thread thread = new Thread(new MyThread());
thread.start();
//获取线程数
ThreadGroup threadGroup = Thread.currentThread().getThreadGroup();
while(threadGroup.getParent() != null){
threadGroup = threadGroup.getParent();
}
int totalThread = threadGroup.activeCount();
System.out.println("当前线程数:"+totalThread);
}
}
thread.start();
public static void main(String[] args) {
new Thread();
//获取线程数
ThreadGroup threadGroup = Thread.currentThread().getThreadGroup();
while(threadGroup.getParent() != null){
threadGroup = threadGroup.getParent();
}
int totalThread = threadGroup.activeCount();
System.out.println("当前线程数:"+totalThread);
}
}
public static void main(String[] args) {
new Thread().start();1
//获取线程数
ThreadGroup threadGroup = Thread.currentThread().getThreadGroup();
while(threadGroup.getParent() != null){
threadGroup = threadGroup.getParent();
}
int totalThread = threadGroup.activeCount();
System.out.println("当前线程数:"+totalThread);
}
}
thread.start();
创建线程干嘛
public void run(){
System.out.println("实现Runnbale的方式……");
}
public void run() {
if (target != null) {
target.run();
}
}
@Override
public void run(){
System.out.println("实现Runnbale的方式……");
}
}
thread.start();
可能我们以前真的错了
@Override
public void run() {
System.out.println("继承Thread类的线程……");
}
}
@Override
public void run() {
System.out.println("匿名内部类的方式创建线程");
}
}).start();
@Override
public Integer call() throws Exception {
System.out.println("实现callable的形式创建的线程");
return 1024;
}
}
Thread thread = new Thread(futureTask);
thread.start();
System.out.println(futureTask.get());
创建线程的方式有且仅有一种,那就是new Thread()的方式
盘点之前的错误回答
继承Thread类 实现Runnable接口 匿名内部类 实现callable接口 使用线程池
总结
这些都是线程执行任务的方式,或者说是真正实现线程任务的方式,但是无论怎样,说是创建线程的方式,是不是有点不对呢?
有道无术,术可成;有术无道,止于术
欢迎大家关注Java之道公众号
好文章,我在看❤️