java启动线程的两种方式
java启动线程的三种方式
1.继承 Thread类,重写run方法,调用start方法启动线程
2.实现Runnable接口,重写run方法,调用start方法启动线程
3.实现Callable接口
代码如下
前两种方式:
package club.jiajiajia;
/**
* 创建线程的两种方式
*/
public class Main {
public static void main(String[] args) {
//第一种 继承 Thread类,重写run方法,调用start方法启动线程
new Thread(){
@Override
public void run() {
while(true){
try {
Thread.sleep(500);
System.out.println("Thread name1:"+Thread.currentThread().getName());
//得到当前线程的线程名
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}.start();
//第二种 实现Runnable接口,重写run方法,调用start方法启动线程
new Thread(new Runnable() {
@Override
public void run() {
while(true){
try {
Thread.sleep(500);
System.out.println("Thread name2:"+Thread.currentThread().getName());
//得到当前线程的线程名
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}).start();
}
}
第三种方式:
package threadTest.test1;
import java.util.concurrent.Callable;
public class ThreadTest implements Callable<Integer>{
@Override
public Integer call() throws Exception {
// TODO Auto-generated method stub
//任务
//返回结果
return 1;
}
}
package threadTest.test1;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.FutureTask;
public class Test1 {
public static void main(String[] args) {
FutureTask<Integer> futureTask = new FutureTask<Integer>(new ThreadTest());
new Thread(futureTask).start();
try {
//接收结果
Integer sum = futureTask.get();
System.out.println(sum);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (ExecutionException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
接着再来看一个面试题
下面的代码执行情况是怎样的??
package club.jiajiajia;
public class Main2 {
public static void main(String args[]){
new Thread(new Runnable() {
@Override
public void run() {
while(true){
try {
Thread.sleep(500);
System.out.println("Thread name1:"+Thread.currentThread().getName());
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}){
@Override
public void run() {
while(true){
try {
Thread.sleep(500);
System.out.println("Thread name2:"+Thread.currentThread().getName());
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}.start();
}
}
那么答案当然是 重复打印:Thread name2:Thread-0
原因就是子类重写的方法会覆盖父类的方法,
走进Thread的run方法:
而targer就是我们传入的Runnable的实现类
所以Thread的run方法的代码将会被覆盖,不会再调用实现Runnable接口的run方法。
评论区
请写下您的评论...
猜你喜欢
java基础
2451
java线程中关于中断的三个重要方法interrupt(),isInterrupted()和interrupted()解释:interrupt():调用某线程的interrupt()方法会改变当前线
ofc
线程的五种基本状态
official
1111
线程的五种基本状态:初始化、可运行、运行、阻塞、终止阻塞状态分为:等待阻塞、同步阻塞、其他阻塞三种方式等待阻塞:调用某锁对象的wait方法可使当前线程进入等待阻塞状态,并且该线程放弃所有资源(包括
数据库基础
2290
方式1,使用服务名jdbc:oracle:thin:@localhost:1521/orclpdborclpdb是oracle数据库的服务名方式2,使用SIDjdbc:oracle:thin:@localhost:1521:orclorcl是oracle数据库的SID
blog
线程的状态
java基础
3352
”。线程对象被创建后,其它线程调用了该对象的start()方法,从而来启动该线程。例如,thread.start()。处于就绪状态的线程,随时可能被CPU调度执行。3.运行状态(Running):线程获取C
ofc
单例模式的5种实现方法-设计模式
weblog
998
1.双重检查的方式特点:线程安全;延迟加载;效率较高,推荐使用/*** 双重检查的方式,线程安全;延迟加载;效率较高。*@authorLENOVO**/publicclassSingleton
blog
有关线程的常用方法总结
java基础
5955
(Runnabletarget,Stringname)。方法:start:启动线程。yield:注意这是一个静态的方法。使当前运行线程释放处理器资源。sleep:这也是一个静态方法,即使当前运行线程休眠millis毫秒join:
blog
java线程通讯之生产者消费者模式
java基础
1508
java线程通讯之生产者消费者模式生产者消费者模式是并发、多线程编程中经典的设计模式,生产者和消费者通过分离的执行工作解耦,简化了开发模式,生产者和消费者可以以不同的速度生产和消费数据。一个生产和消
blog
线程之间的通讯
java基础
3302
1.什么是线程通信线程之间通信的两个基本问题是互斥和同步。线程同步是指线程之间所具有的一种制约关系,一个线程的执行依赖另一个线程的消息,当它没有得到另一个线程的消息时应等待,直到消息到达时才被唤醒
最新发表
归档
2018-11
12
2018-12
33
2019-01
28
2019-02
28
2019-03
32
2019-04
27
2019-05
33
2019-06
6
2019-07
12
2019-08
12
2019-09
21
2019-10
8
2019-11
15
2019-12
25
2020-01
9
2020-02
5
2020-03
16
2020-04
4
2020-06
1
2020-07
7
2020-08
13
2020-09
9
2020-10
5
2020-12
3
2021-01
1
2021-02
5
2021-03
7
2021-04
4
2021-05
4
2021-06
1
2021-07
7
2021-08
2
2021-09
8
2021-10
9
2021-11
16
2021-12
14
2022-01
7
2022-05
1
2022-08
3
2022-09
2
2022-10
2
2022-12
5
2023-01
3
2023-02
1
2023-03
4
2023-04
2
2023-06
3
2023-07
4
2023-08
1
2023-10
1
2024-02
1
2024-03
1
2024-04
1
2024-08
1
标签
算法基础
linux
前端
c++
数据结构
框架
数据库
计算机基础
储备知识
java基础
ASM
其他
深入理解java虚拟机
nginx
git
消息中间件
搜索
maven
redis
docker
dubbo
vue
导入导出
软件使用
idea插件
协议
无聊的知识
jenkins
springboot
mqtt协议
keepalived
minio
mysql
ensp
网络基础
xxl-job
rabbitmq
haproxy
srs
音视频
webrtc
javascript
加密算法
目录
没有一个冬天不可逾越,没有一个春天不会来临。最慢的步伐不是跬步,而是徘徊,最快的脚步不是冲刺,而是坚持。