一 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. 第十七个知识点:描述和比较DES和AES的轮结构

    第十七个知识点:描述和比较DES和AES的轮结构 这是密码学52件事中的第17篇.本周我们描述和比较DES和AES的结构. DES和AES都是迭代分组密码的例子.分组密码通过重复使用一个简单的轮函数来 ...

  2. 如何优雅地读写HttpServletRequest和HttpServletResponse的请求体

    最近很多交互要同原生的HttpServletRequest和HttpServletResponse打交道.从HttpServletRequest中读取body数据封装成某种数据结构:向HttpServ ...

  3. Docker如何制作镜像-Dockerfile的使用

    1:什么是Dockerfile Dockerfile是一个文本文档,可以通过docker build 命令构建成一个镜像. 我们可以在Dockerfile中定义一系列的命令,构建出我们想要的镜像. 想 ...

  4. 编写Java程序,创建Dota游戏中的兵营类,兵营类有一个类成员变量count、一个实例变量name和另一个实例变量selfCount。

    返回本章节 返回作业目录 需求说明: 创建Dota游戏中的兵营类 兵营类有一个类成员变量count.一个实例变量name和另一个实例变量selfCount. count表示的是兵营已经创建士兵的总数: ...

  5. 编写Java程序,使用日期处理类实现日期的格式化输出

    返回本章节 返回作业目录 需求说明: 按"yyyy-MM-dd"格式输入一个字符串型日期,然后输出这个日期为本年中的第几周. 实现思路: 使用SimpleDateFormat格式化 ...

  6. Java面向对象笔记 • 【第5章 异常处理】

    全部章节   >>>> 本章目录 5.1 异常概述 5.1.1 程序中的异常 5.1.2 异常分类 5.1.3 实践练习 5.2 try-catch处理异常 5.2.2 使用f ...

  7. 使用docker-compose部署Kafka集群

    之前写过Kafka集群的部署,不过那是基于宿主机的,地址:Kafka基础教程(二):Kafka安装 和Zookeeper一样,有时想简单的连接Kafka用一下,那就需要开好几台虚拟机,如果Zookee ...

  8. 学习笔记--Java字面值

    Java 字面值 /** * 关于字面值: * * - 字面值:10.100."abc"."a".true.false * * - 字面值就是数据 * * - ...

  9. 使用Swing的GUI编程

    Swing AWT概述 AWT:抽象窗口工具包,提供了一套与本地图形界面进行交互的接口,是Java提供的用来建立和设置Java的图形用户界面的基本工具 Swing以AWT为基础的,尽管Swing消除了 ...

  10. Python多线程、线程池及实际运用

    我们在写python爬虫的过程中,对于大量数据的抓取总是希望能获得更高的速度和效率,但由于网络请求的延迟.IO的限制,单线程的运行总是不能让人满意.因此有了多线程.异步协程等技术. 下面介绍一下pyt ...