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】43. Multiply Strings 解题报告(Python & C++)
作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 日期 题目地址:https://leetcode.c ...
- 【自编教材】16万8千字的HTML+CSS基础 适合从0到1-可收藏
[图片链接有点小问题,这几天更新,敬请期待!] 目 录 第一章HTML基础 1.1 HTML简介和发展史 1.1.1 什么是HTML 1.1.2 HTML的发展历程 1.1.3 web标准 1.2 开 ...
- JSP的数据从数据库中获取导入type=date的input标签中
jsp 页面最开始加上 <%@ taglib prefix="c" uri="http://java.sun.com/jstl/core" %> & ...
- 快看!❤️又一超实用浏览器插件!常用网站自动整合,JSON格式化,CSDN全站去广告!多种工具一键调用。开发者的福音!
其实这个插件才出来的时候博主也下载了使用过,并没有什么亮点,那时候甚至觉得有点多余,因为CSDN全站去广告啥的,早就安装了油猴脚本,广告?不存在的嘿嘿.. 就在前几天看见CSDN的活动在推荐这款插件, ...
- Java初学者作业——编写 Java 程序,定义 Java 类 (Point) 用来表示坐标,坐标范围在(0,0)到(100,100)以内,并显示合法的坐标在控制台。
返回本章节 返回作业目录 需求说明: 编写 Java 程序,定义 Java 类 Point 用来表示坐标,坐标范围在(0,0)到(100,100)以内,并显示合法的坐标在控制台. 实现思路: 定义 P ...
- TCP KeepAlive机制理解与实践小结
0 前言 本文将主要通过抓包并查看报文的方式学习TCP KeepAlive机制,以此加深理解. 1 TCP KeepAlive机制简介 TCP长连接下,客户端和服务器若长时间无数据交互情况下,若一方出 ...
- dart系列之:dart代码最佳实践
目录 简介 命名规则 import中的顺序 格式化 总结 简介 每种语言都有自己的代码风格,这种代码风格是跟语言特性息息相关的.如果在编码的过程中遵循这种统一的编码规则,会给我们的业务带来非常多的便利 ...
- MATLAB 不同维度矩阵加减乘除
>> A=[1,2,3;4,5,6;7,8,9],B=[1,2;3,4] A = 1 2 3 4 5 6 7 8 9 B = 1 2 3 4 >> [rA,cA]=size(A ...
- Python中*args 和**kwargs作为形参和实参时的功能详解
*args 和**kwargs作为形参 *args 和**kwargs作为形参被称为不定长参数,用来处理超出必备参数部分的参数.注意:args和kwargs可以修改为其它变量名. 必备参数就是在定义函 ...
- linux 查看历史命令 history命令
1.history命令 "history"命令就是历史记录.它显示了在终端中所执行过的所有命令的历史. history //显示终端执行过的命令 history 10 //显示最近 ...