java 多线程 start方法 run方法 简单介绍。
一 start开启一个多线程, run 只是一个内部的方法。
package com.aaa.threaddemo;
/*
* start方法的作用?
* 在 Java中启动多线程调用的是start方法。
* 在start方法中,真正实现多线程的是一个本地的方法start0。
* 调用start方法启动一个线程,此时的状态是 就绪。
* 无需等待run方法体代码执行完毕,可以继续执行下面的代码。
* 被synchronized 修饰, 线程是安全的
* 由jvm创建的main方法线程和system组线程,并不会通过start来启动。
* 等到run方法run 下结束,线程终止。start方法不可使用两次。
*
public synchronized void start() {
if (threadStatus != 0)
throw new IllegalThreadStateException();
group.add(this); boolean started = false;
try {
start0();
started = true;
} finally {
try {
if (!started) {
group.threadStartFailed(this);
}
} catch (Throwable ignore) {
}
}
} private native void start0(); run方法?
run()方法只是一个类中的普通方法,调用run方法跟调用普通方法一样
方法 run()称为线程体,它包含了要执行的这个线程的内容,线程就进入了 【运行状态】,开始运
行 run 函数当中的代码。
Run 方法运行结束, 此线程终止。再调用start方法报错的。
然后 CPU 再调度其它线 @Override
public void run() {
if (target != null) {
target.run();
}
}
*
*/
public class StartDemo {
public static void main(String[] args) { Runnable rdemo = new Runnable() {
public void run() {
String name = Thread.currentThread().getName();
System.out.println("当前运行的线程 : " + name);
}
}; rdemo.run(); // 开启多线程,执行run方法
new Thread(rdemo).start();
}
}

二 直观比较run方法和start。
package com.aaa.threaddemo;
/*
* start方法的作用?
* 在 Java中启动多线程调用的是start方法。
* 在start方法中,真正实现多线程的是一个本地的方法start0。
* 调用start方法启动一个线程,此时的状态是 就绪。
* 无需等待run方法体代码执行完毕,可以继续执行下面的代码。
* 被synchronized 修饰, 线程是安全的
* 由jvm创建的main方法线程和system组线程,并不会通过start来启动。
* 等到run方法run 下结束,线程终止。start方法不可使用两次。
*
public synchronized void start() {
if (threadStatus != 0)
throw new IllegalThreadStateException();
group.add(this); boolean started = false;
try {
start0();
started = true;
} finally {
try {
if (!started) {
group.threadStartFailed(this);
}
} catch (Throwable ignore) {
}
}
} private native void start0(); run方法?
run()方法只是一个类中的普通方法,调用run方法跟调用普通方法一样
方法 run()称为线程体,它包含了要执行的这个线程的内容,线程就进入了 【运行状态】,开始运
行 run 函数当中的代码。
Run 方法运行结束, 此线程终止。再调用start方法报错的。
然后 CPU 再调度其它线 @Override
public void run() {
if (target != null) {
target.run();
}
}
*
*/
public class StartDemo {
public static void main(String[] args) {
// 调用的是类中的一个普通方法run
runDemo runDemo = new runDemo();
runDemo.run(); //开启多线程
runDemo.start();
//线程已经结束,二次执行会报错
runDemo.start();
}
} /*
*
Runnable rdemo = new Runnable() {
public void run() {
String name = Thread.currentThread().getName();
System.out.println("当前运行的线程 : " + name);
}
}; rdemo.run(); // 开启多线程,执行run方法
new Thread(rdemo).start();
*
// 这里是new 一个Thread, 可以继续调用start方法。
new Thread(rdemo).start(); */
class runDemo extends Thread{
@Override
public void run() {
// TODO Auto-generated method stub
System.out.println("run show" + Thread.currentThread().getName());
}
}

三 新建线程,start 方法可再次使用
package com.aaa.threaddemo;
/*
* start方法的作用?
* 在 Java中启动多线程调用的是start方法。
* 在start方法中,真正实现多线程的是一个本地的方法start0。
* 调用start方法启动一个线程,此时的状态是 就绪。
* 无需等待run方法体代码执行完毕,可以继续执行下面的代码。
* 被synchronized 修饰, 线程是安全的
* 由jvm创建的main方法线程和system组线程,并不会通过start来启动。
* 等到run方法run 下结束,线程终止。start方法不可使用两次。
*
public synchronized void start() {
if (threadStatus != 0)
throw new IllegalThreadStateException();
group.add(this); boolean started = false;
try {
start0();
started = true;
} finally {
try {
if (!started) {
group.threadStartFailed(this);
}
} catch (Throwable ignore) {
}
}
} private native void start0(); run方法?
run()方法只是一个类中的普通方法,调用run方法跟调用普通方法一样
方法 run()称为线程体,它包含了要执行的这个线程的内容,线程就进入了 【运行状态】,开始运
行 run 函数当中的代码。
Run 方法运行结束, 此线程终止。再调用start方法报错的。
然后 CPU 再调度其它线 @Override
public void run() {
if (target != null) {
target.run();
}
}
*
*/
public class StartDemo {
public static void main(String[] args) { Runnable rdemo = new Runnable() {
public void run() {
String name = Thread.currentThread().getName();
System.out.println("当前运行的线程 : " + name);
}
}; rdemo.run(); // 开启多线程,执行run方法
new Thread(rdemo).start(); // 这里是new 一个Thread, 可以继续调用start方法。
new Thread(rdemo).start(); // 调用的是类中的一个普通方法run
runDemo runDemo = new runDemo();
//开启多线程
runDemo.start();
//线程已经结束,二次执行会报错
runDemo.start();
}
}
class runDemo extends Thread{
@Override
public void run() {
// TODO Auto-generated method stub
System.out.println("run show" + Thread.currentThread().getName());
}
}

java 多线程 start方法 run方法 简单介绍。的更多相关文章
- 【细说Java】方法重载的简单介绍
1. 什么是重载 方法名称相同,但它们的参数类型或个数不同,这样,方法在被调用时编译器就可以根据参数的类型与个数的不同加以区分,这就是方法的重载. 既然可以通过参数类型或参数个数来作为重载条件,那返回 ...
- 多线程 start 和 run 方法到底有什么区别?
昨天栈长介绍了<Java多线程可以分组,还能这样玩!>线程分组的妙用.今天,栈长会详细介绍 Java 中的多线程 start() 和 run() 两个方法,Java 老司机请跳过,新手或者 ...
- Python 多线程 start()和run()方法的区别(三)
上一篇文章最后只是简单介绍了start()方法和run()方法,这篇文章再详细地看下start()和run()的区别. 在实例调用的函数中加入打印当前线程的名字,分别用start()方法和run()方 ...
- Java多线程中的join()方法
一.join()方法介绍 join() 定义在Thread.java中.join()方法把指定的线程加入到当前线程,可以将两个交替执行的线程合并为顺序执行的线程.比如在线程B中调用了线程A的join( ...
- Java中start和run方法的区别
一.问题引入 说到这两个方法就不得不说多线程,说到多线程就不得不提实现多线程的两种方式继承Thread类和实现Runable接口,下面先看这两种方式的区别. 二. Java中实现多线程 ...
- java 多线程——join()方法
在java语言中,join()方法的作用是让调用该方法的线程在执行完run()方法后,再执行join 方法后面的代码. 简单点说就是,将两个线程合并,用于实现同步的功能. 具体而言:可以通过线程A的j ...
- 【JAVA多线程中使用的方法】
一.sleep和wait的区别. 1.wait可以指定时间,也可以不指定. 而sleep必须制定. 2.在同步的时候,对于CPU的执行权和以及锁的处理不同. wait:释放执行权,释放锁. sleep ...
- JAVA多线程间隔时间段执行方法
import java.util.Date; import java.util.Timer; import java.util.TimerTask; public class ManyProject ...
- 线程终止的四种方式,interrupt 方法使用的简单介绍。
一 正常结束. package com.aaa.threaddemo; /* 一 终止线程的四种方式? * 程序运行结束,线程终止. * */ public class ThreadTerminati ...
随机推荐
- 【LeetCode】62. Unique Paths 解题报告(Python & C++)
作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 题目地址:https://leetcode.com/problems/unique-pa ...
- 1105 第K大的数
1105 第K大的数 基准时间限制:1 秒 空间限制:131072 KB 数组A和数组B,里面都有n个整数.数组C共有n^2个整数,分别是A[0] * B[0],A[0] * B[1] ...... ...
- Grids
Grids Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 65535/65535 K (Java/Others)Total Subm ...
- 第48篇-native方法调用解释执行的Java方法
举一个native方法调用解释执行的Java方法的实例,如下: public class TestJNI { static { System.load("/media/mazhi/sourc ...
- 后缀树的建立-Ukkonen算法
参考: Ukkonen算法讲解 Ukkonen算法动画 Ukkonen算法,以字符串abcabxabcd为例,先介绍一下运算过程,最后讨论一些我自己的理解. 需要维护以下三个变量: 当前扫描位置# 三 ...
- [Error]ValueError: Object arrays cannot be loaded when allow_pickle=False
问题描述使用numpy的函数 numpy.load() 加载数据时报错: ValueError: Object arrays cannot be loaded when allow_pickle=Fa ...
- 自动化集成:Pipeline整合Docker容器
前言:该系列文章,围绕持续集成:Jenkins+Docker+K8S相关组件,实现自动化管理源码编译.打包.镜像构建.部署等操作:本篇文章主要描述流水线集成Docker用法. 一.背景描述 微服务架构 ...
- Android开发布局 案例一
权重:就是在布局界面中所占的比例 实践案例: <?xml version="1.0" encoding="utf-8"?> <LinearLa ...
- 初识python 之 自动拆分转换文本内容
上一篇升级版,转换文件内容. #!/user/bin env python # author:Simple-Sir # time:2021/7/9 23:32 def txt_2_list(filen ...
- Go语言系列之包
Go语言的包(package) 一.包介绍 包(package)是多个Go源码的集合,是一种高级的代码复用方案,Go语言为我们提供了很多内置包,如fmt.os.io等. 二.定义包 我们还可以根据自己 ...