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】414. Third Maximum Number 解题报告(Python & C++)
作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 替换最大值数组 使用set 三个变量 日期 题目地址 ...
- Web前端面试题整合,持续更新【可以收藏】
饭后闲来无事,把这几年带学生用的一些面试题整合一下,供上!拿走,不客气!应付一般公司的二面基本上是够用了.祝你早日拿到心仪的offer. css相关 1. 万能居中 1.margin: 0 auto; ...
- CS5263替代PS176|设计DP1.4转HDMI2.0音视频转换线方案|PS176方案
PS176是一个显示端口 (DP)至HDMI 2.0视频接口转换器适用于需要视频协议转换的电缆适配器.电视接收器.监视器和其他应用.它将接受任何显示端口输入格式,包括DP 1.1a.dp1.2a.dp ...
- MySQL基础操作指南
启动停止MySQL服务 1.Windows服务窗口启动:开始 → 运行 → services.msc → 找到MySQL 56服务 2.MySQL命令启动:开始 → 运行 → 管理员权限运行cmd → ...
- MySQL数据库基础(3)DDL和DML
一.使用DDL定义数据库和表结构 结构化查询语言:(Structured Query Language,SQL)是一种特殊目的的编程语言,是一种数据库查询和程序设计语言,专用于存取数据以及查询.更新和 ...
- xorm 条件查询时区的问题
问题描述:如果在查询的时候,直接传时间格式作为条件,时间会被驱动程序转为UTC格式,因此会有8个小时的误差. 解决方案1: 将查询时间转为字符串 db.where("time > ?& ...
- 使用VUE组件创建SpreadJS自定义单元格(一)
作为近五年都冲在热门框架排行榜首的Vue,大家一定会学到的一部分就是组件的使用.前端开发的模块化,可以让代码逻辑更加简单清晰,项目的扩展性大大加强.对于Vue而言,模块化的体现集中在组件之上,以组件为 ...
- notepad++加到右键
win10系统左下角点击"开始"->运行->regedit,打开注册表编辑器 在HKEY_CLAsssEs_RooT→ * → shell 下,在shell下,新建项命 ...
- Echart可视化学习(八)
文档的源代码地址,需要的下载就可以了(访问密码:7567) https://url56.ctfile.com/f/34653256-527823386-04154f 正文: 新增需求 点击 2020年 ...
- 微信小程序封装mixins方法
在app.js中这样引入 import '@src/utils/mixins' mixins函数如下 /** * 封装类似vue的混入功能 */ let native = Page Page = (o ...