Java创建线程的两种方式
作者:Holten 时间:2023-09-12 05:20:55
前言
多线程是我们开发过程中经常遇到的,也是必不可少需要掌握的。当我们知道需要进行多线程开发时首先需要知道的自然是如何实现多线程,也就是我们应该如何创建线程。
在Java中创建线程和创建普通的类的对象操作是一样的,我们可以通过两种方式来创建线程:
1、继承Thread类,并重写run()方法。
2、实现Runnable接口,并实现run()方法。
方法一:继承Thread类
代码非常简单
首先重载一个构造函数,以便我们可以给线程命名。
重写run()方法。
这里我们先让线程输出线程名+start。
然后每5ms输出线程名+一个递增数。
/**
* Created by holten.gao on 2016/10/17.
*/
public class threadThread extends Thread {
public threadThread(String name) {
super(name);
}
@Override
public void run() {
System.out.println(this.getName()+" start!");
for(int i=0;i<10;i++){
System.out.println(this.getName()+" "+i);
try {
Thread.sleep(5);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
方法二:实现Runnable接口
代码也非常简单
实现run()方法。
这里我们先让线程输出线程名+start。
然后每5ms输出线程名+一个递增数。
/**
* Created by holten.gao on 2016/10/17.
*/
public class runnableThread implements Runnable {
@Override
public void run() {
System.out.println(Thread.currentThread().getName()+" start!");
for(int i=0;i<10;i++){
System.out.println(Thread.currentThread().getName()+" "+i);
try {
Thread.sleep(5);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
测试结果
测试代码
/**
* Created by holten.gao on 2016/10/17.
*/
public class Main {
public static void main(String[] args) {
Thread threadThread=new threadThread("threadThread");
threadThread.start();
Thread runnableThread=new Thread(new runnableThread(),"runnableThread");
runnableThread.start();
}
}
测试结果
threadThread start!
threadThread 0
runnableThread start!
runnableThread 0
threadThread 1
runnableThread 1
threadThread 2
runnableThread 2
threadThread 3
runnableThread 3
threadThread 4
runnableThread 4
threadThread 5
runnableThread 5
threadThread 6
runnableThread 6
threadThread 7
runnableThread 7
threadThread 8
runnableThread 8
threadThread 9
runnableThread 9
两种方法比较
1.因为Java只支持单继承,所以使用方法一就不能再继承其他类了;而方法二实现接口则不会影响继承其他类。
2.方法一由于是继承Thread,所以直接new出来就可以start;而方法二需要将对象作为参数传入Thread对象才能得到Thread对象。
3.方法一中可以直接通过this.getName获得线程名;而方法二需要Thread.currentThread().getName()获得
标签:Java,线程
![](/images/zang.png)
![](/images/jiucuo.png)
猜你喜欢
java程序设计语言的优势及特点
2022-08-16 09:12:57
java比较器Comparable接口与Comaprator接口的深入分析
2022-01-20 11:51:09
Springboot使用@Valid 和AOP做参数校验及日志输出问题
2023-12-05 04:39:12
Android Studio中使用jni进行opencv开发的环境配置方法
2021-07-26 00:02:06
![](https://img.aspxhome.com/file/2023/4/102624_0s.jpg)
Java实现二分查找的变种
2023-11-07 11:26:28
![](https://img.aspxhome.com/file/2023/6/85556_0s.jpg)
完美解决idea moudle没有蓝色的小方块的问题
2021-05-28 16:09:03
![](https://img.aspxhome.com/file/2023/7/68197_0s.jpg)
mybatis-plus返回查询总记录数方式
2021-11-27 01:31:34
C#实现按照指定长度在数字前补0方法小结
2023-02-23 09:42:32
java 线程中start方法与run方法的区别详细介绍
2023-08-23 20:41:31
C#计算器编写代码
2022-12-28 02:57:25
![](https://img.aspxhome.com/file/2023/5/108635_0s.gif)
理解C#中的Lambda表达式
2022-10-30 07:50:23
C#添加、读取Word脚注尾注的方法
2022-12-24 02:12:22
![](https://img.aspxhome.com/file/2023/2/100152_0s.png)
Java基础之Web服务器与Http详解
2021-08-13 16:39:42
![](https://img.aspxhome.com/file/2023/7/81907_0s.png)
Java 网络编程总结
2023-11-10 22:19:29
![](https://img.aspxhome.com/file/2023/1/59071_0s.png)
java gui详解贪吃蛇小游戏实现流程
2023-10-08 07:12:24
![](https://img.aspxhome.com/file/2023/0/78920_0s.png)
java ThreadPoolExecutor线程池拒绝策略避坑
2021-09-05 08:39:52
Android仿微信图片选择器ImageSelector使用详解
2023-04-08 22:28:02
![](https://img.aspxhome.com/file/2023/4/125444_0s.jpg)
Andriod 获取电池的信息实例代码
2022-01-01 07:17:00
Java8新特性之重复注解与类型注解详解
2023-01-16 16:18:38
![](https://img.aspxhome.com/file/2023/1/81251_0s.jpg)
Java实现发红包功能
2023-12-09 10:33:03