一 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方法 简单介绍。的更多相关文章

  1. 【细说Java】方法重载的简单介绍

    1. 什么是重载 方法名称相同,但它们的参数类型或个数不同,这样,方法在被调用时编译器就可以根据参数的类型与个数的不同加以区分,这就是方法的重载. 既然可以通过参数类型或参数个数来作为重载条件,那返回 ...

  2. 多线程 start 和 run 方法到底有什么区别?

    昨天栈长介绍了<Java多线程可以分组,还能这样玩!>线程分组的妙用.今天,栈长会详细介绍 Java 中的多线程 start() 和 run() 两个方法,Java 老司机请跳过,新手或者 ...

  3. Python 多线程 start()和run()方法的区别(三)

    上一篇文章最后只是简单介绍了start()方法和run()方法,这篇文章再详细地看下start()和run()的区别. 在实例调用的函数中加入打印当前线程的名字,分别用start()方法和run()方 ...

  4. Java多线程中的join()方法

    一.join()方法介绍 join() 定义在Thread.java中.join()方法把指定的线程加入到当前线程,可以将两个交替执行的线程合并为顺序执行的线程.比如在线程B中调用了线程A的join( ...

  5. Java中start和run方法的区别

    一.问题引入         说到这两个方法就不得不说多线程,说到多线程就不得不提实现多线程的两种方式继承Thread类和实现Runable接口,下面先看这两种方式的区别. 二. Java中实现多线程 ...

  6. java 多线程——join()方法

    在java语言中,join()方法的作用是让调用该方法的线程在执行完run()方法后,再执行join 方法后面的代码. 简单点说就是,将两个线程合并,用于实现同步的功能. 具体而言:可以通过线程A的j ...

  7. 【JAVA多线程中使用的方法】

    一.sleep和wait的区别. 1.wait可以指定时间,也可以不指定. 而sleep必须制定. 2.在同步的时候,对于CPU的执行权和以及锁的处理不同. wait:释放执行权,释放锁. sleep ...

  8. JAVA多线程间隔时间段执行方法

    import java.util.Date; import java.util.Timer; import java.util.TimerTask; public class ManyProject ...

  9. 线程终止的四种方式,interrupt 方法使用的简单介绍。

    一 正常结束. package com.aaa.threaddemo; /* 一 终止线程的四种方式? * 程序运行结束,线程终止. * */ public class ThreadTerminati ...

随机推荐

  1. 1079 - Just another Robbery

    1079 - Just another Robbery   PDF (English) Statistics Forum Time Limit: 4 second(s) Memory Limit: 3 ...

  2. Docker 与 K8S学习笔记(五)—— 容器的操作(下篇)

    上一篇我们学习了容器的启动和常用的进入容器的方式,今天我们来看看如何控制容器起停以及容器删除操作. 一.stop.kill.start和restart stop.kill命令都可以停止运行的容器,二者 ...

  3. Java学到什么程度可以面试工作?

    ​先说结论: 1 大多数公司,对于Java初级开发的要求是,会用Spring Boot+JPA做增删改查 2 所以零基础的Java小白,无需学太多的内容,只要掌握Spring Boot+JPA做增删改 ...

  4. XSLT映射文件函数

    任何的编程语言或者是SQL语句都有内置的函数或方法,而强大灵活的xslt技术也是如此.熟练掌握XSLT的常用函数的用法,XSLT的应用将变得如此轻松,你会发现XSLT比想象中还要牛!以下是xslt数值 ...

  5. Java初学者作业——编写 Java 程序,定义 Employee 类以及 HR 类,实现 HR 为 Employee 加薪的功能。

    返回本章节 返回作业目录 需求说明: 编写 Java 程序,定义 Employee 类以及 HR 类,实现 HR 为 Employee 加薪的功能. 实现思路: 定义 Employee 类,并定义属性 ...

  6. VMware客户端vSphereClient新建虚拟机

    1.说明 VMware客户端工具vSphere Client, 用来连接和管理ESX或ESXi主机(下面称为宿主机), 可以方便的创建.管理虚拟机,并分配相应的资源.宿主机就是使用虚拟化软件运行虚拟机 ...

  7. ElasticSearch启动失败:master not discovered or elected yet, an election requires at least X nodes with ids from [XXXXX]

    这个问题困扰过我一段时间,它其实是说未能选举出一个主节点,最后在官网教程中找到答案. 首先是启动(链接): 总结下来就是,如果ES集群是第一次启动,那么需要 cluster.initial_maste ...

  8. 如何优雅的设置UI库组件的属性?

    UI库提供了很多组件,组件又带有很多属性,有一些常用属性我们可以记住并且手撸,但是有些不常用的属性,或者需要设置多个属性,这样的情况下写起来就麻烦了,有时候还要打开帮助文档看看属性是怎么设定的,需要设 ...

  9. MongoDB 安装及制作成windows服务

    下载:  注:直接使用浏览器下载速度很慢,建议使用其他下载软件下载(比如:迅雷) 官网下载地址: https://fastdl.mongodb.org/win32/mongodb-win32-x86_ ...

  10. linux7,一台物理机上使用VM装多个虚拟机,始终只有一个虚拟机网络正常,其他虚拟机报错Error: Connection activation failed: No suitable device found for this connection.

    今天在VM新装了一个虚拟机,结果发现原来的虚拟机连不上了,重启网络服务后报错 Error: Connection activation failed: No suitable device found ...