java 多线程:Thread类;Runnable接口
1,进程和线程的基本概念:
2、java中多线程的使用:Thread
构造:
- new Thread()
启动一个新的线程:
- .start()
常用方法:
- Thread.currentThread().getName() //获取当前线程的名字
/**
* @ClassName MyThreadExample
* @projectName: object1
* @author: Zhangmingda
* @description: XXX
* date: 2021/4/19.
*/
public class MyThreadExample {
private static class MyFirstThread extends Thread{
//自己写个线程,重写run()方法
@Override
public void run() {
System.out.println("MyFirstThread运行中:名字是:" + Thread.currentThread().getName());
}
}
public static void main(String[] args) {
MyFirstThread myFirstThread = new MyFirstThread();
myFirstThread.run();//在当前线程中调用run()方法;不会产生新的线程
myFirstThread.start();
System.out.println("main方法中运行的线程名字:" + Thread.currentThread().getName());
/**
* 运行输出:
* main方法中运行的线程名字:main
* MyFirstThread运行中:名字是:Thread-0
*/
}
}


可以看出每次运行顺序不一样
- (1),调用start()之后,程序会通知我们的JVM,告诉jvm我已经准备好了,可以运行了。
- (2),Jvm异步的调用我们的线程对应的run()方法。
- (3),Jvm什么时候运行我们的run()方法,这个是程序员没法控制的(其实呢,还是可以相对的控制,这个之后讲,但是,你要做到绝对的控制它马上运行,还是不行)
- (4),start()方法的调用顺序,不代表线程的run()方法的运行顺序。
3、Thread实现了Runnable接口,通过实现Runnable接口的方式来实现一个线程
Thread 类实现了Runnable接口,该接口只有有一个抽象方法run()
Thread 类构造方法可以传入一个Runnable接口实现类来构造线程实例:
示例代码:
/**
* @ClassName UseRunnableThread
* @projectName: object1
* @author: Zhangmingda
* @description: XXX
* date: 2021/4/19.
*/
public class UseRunnableThread {
private static class MyRunnableThread implements Runnable { @Override
public void run() {
System.out.println("MyRunnableThread" + Thread.currentThread().getName());
}
} public static void main(String[] args) {
Thread thread = new Thread(new MyRunnableThread());
//lambda 表达式方式构造线程方法
Thread thread1 = new Thread(()->System.out.println("Lambda表达式构建的线程,匿名内部类对象:" + Thread.currentThread().getName()) );
thread.start();
thread1.start();
System.out.println("main方法运行的线程:" + Thread.currentThread().getName());
/**
* 运行输出:
* Lambda表达式构建的线程,匿名内部类对象:Thread-1
* MyRunnableThreadThread-0
* main方法运行的线程:main
*/
}
}
java 多线程:Thread类;Runnable接口的更多相关文章
- 探Java多线程Thread类和Runnable接口之间的联系
首先复习一下Java多线程实现机制,Java实现多线程方法有如下这么几种: 1.继承了(extends)Thread类 2.实现了(implements)Runnable接口 也就是说 有如下两种情 ...
- JAVA多线程Thread VS Runnable详解
要求 必备知识 本文要求基本了解JAVA编程知识. 开发环境 windows 7/EditPlus 演示地址 源文件 进程与线程 进程是程序在处理机中的一次运行.一个进程既包括其所要执行的指令,也 ...
- Java多线程Thread类了解和使用
创建线程的两种方式 extends Thread 类 public class WelComeApp { public static void main(String[] args) { Welcom ...
- java 多线程Thread和Runnable的区别
如果一个类继承Thread,则不适合资源共享.但是如果实现了Runable接口的话,则很容易的实现资源共享 实现Runnable接口比继承Thread类所具有的优势:1. 适合多个相同的程序代码的线程 ...
- Java 多线程Thread和Runnable
Thread: class MyThread extends Thread { private int ticketsCont=5; //一共有5张火车票 private String name; / ...
- Java多线程之实现Runnable接口
package org.study2.javabase.ThreadsDemo.runnable; /** * @Auther:GongXingRui * @Date:2018/9/18 * @Des ...
- (CSDN迁移) JAVA多线程实现-实现Runnable接口
实现Runnable接口 implements Runnable 重写run()方法 @Override public void run(){//TODO} 创建线程对象: Thread threa ...
- JAVA多线程Thread与Runnable
一.Runnable Runnable为一个之包含一个run方法的接口 public class MyRunnable implements Runnable{ @Override //表示:预示重写 ...
- Java之多线程(实现Runnable接口)
package test_demo.ThreadsDemo; public class TestRunnable { public static void main(String[] args) { ...
随机推荐
- IntelliJ IDEA 2021.3 正式发布:支持远程开发、IDE故障排查等多项优化改进
作者:程序猿DD 博客:https://blog.didispace.com/ 昨天刚刚跟大家聊了Jetbrains即将推出轻量级编辑器Fleet,以挑战 VS Code的消息,今天又收到了Intel ...
- Codeforces 193E - Fibonacci Number(打表找规律+乱搞)
Codeforces 题目传送门 & 洛谷题目传送门 蠢蠢的我竟然第一眼想套通项公式?然鹅显然 \(5\) 在 \(\bmod 10^{13}\) 意义下并没有二次剩余--我真是活回去了... ...
- Kruskal 重构树小记
其实也不是多难的知识点吧--学了一个中午+半个下午就把它学会了(做过那道 jxd 作业 CF571D 的应该比较好理解) Kruskal 重构树大概就是在正常 Kruskal 的时候,对于两个需要连边 ...
- python3 excel读、写、修改操作
python3上Excel文件操作的库比较多,新手一开始不知道如何选择合适的库,故整理如下: xlwt: 只能写不能读,只支持python2.3到python2.7版本,只支持xls文件. xlrd ...
- MAC——解决问题:打不开,因为它来自身份不明的开发者
今天在mac电脑上,下载了一个软件,是从某个网页上下载的,点击却不能打开,弹出窗口提示说"打不开xx,因为它来自身份不明的开发者",怎么解决?下面来看下. 方法/步骤 点击 ...
- abuse
abuse 近/反义词: ill-treat, maltreat, mistreat, misuse, prostitute, spoil; defame, disparage, malign, re ...
- C++异常处理(try、catch、throw)
本文为转载 博主原文连接 我们通常希望自己编写的程序能够在异常的情况下也能作出相应的处理,而不至于程序莫名其妙地中断或者中止运行了.在设计程序时应充分考虑各种异常情况,并加以处理. 在C++中,一个函 ...
- oracle 存储过程及REF CURSOR的使用
基本使用方法及示例 1.基本结构: CREATE OR REPLACE PROCEDURE 存储过程名字 (参数1 IN NUMBER,参数2 IN NUMBER) AS 变量1 INTEGER := ...
- SpringBoot(4):整合Mybatis
1. 导入mybatis所需要的依赖 1 <!-- 引入 myBatis,这是 MyBatis官方提供的适配 Spring Boot的--> 2 <dependency> 3 ...
- linux下把一个用户从某个组中删除,而不删除用户
查看当前用户/登录用户 基本语法 whoami / who am I 用户组 介绍 类似于角色,系统可以对有共性的多个用户进行统一的管理. 新增组 语法 groupadd 组名 案例演示 添加test ...