一 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. 【LeetCode】735. Asteroid Collision 解题报告(Python & C++)

    作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 栈 日期 题目地址:https://leetcode ...

  2. 1054 - Efficient Pseudo Code

    1054 - Efficient Pseudo Code    PDF (English) Statistics Forum Time Limit: 1 second(s) Memory Limit: ...

  3. CSS实现鼠标移入时图片的放大效果以及缓慢过渡

    transform:scale()可以实现按比例放大或者缩小功能. transition可以设置动画执行的时间,实现缓慢或者快速的执行动画,效果图如下: 源码: <!DOCTYPE html&g ...

  4. Estimation of Non-Normalized Statistical Models by Score Matching

    目录 概 主要内容 方法 损失函数的转换 一个例子 Hyv"{a}rinen A. Estimation of Non-Normalized Statistical Models by Sc ...

  5. uniapp中使用animate.css4.1.1动画库在小程序中不生效解决办法

    找到源码animate.css修改以下代码 :root { --animate-duration: 1s; --animate-delay: 1s; --animate-repeat: 1; } // ...

  6. .net core集成使用EasyNetQ来使用rabbitmq

    之前有写到一篇介绍EasyNetQ的博文(C# .net 使用rabbitmq消息队列--EasyNetQ插件介绍),所以本文从.net core的角度去继承使用EasyNetQ,而用法类似于之前集成 ...

  7. mysql+heartbeat+drbd安装

    环境: 系统           IP地址            主机名             软件包列表 centos6.5  192.168.200.101      server1       ...

  8. iOS微信支付无法直接返回APP的问题

    最近新测个项目,发现在IOS手机的APP上使用微信支付无法直接返回APP. 咨询微信客服,了解到无法直接返回APP的原因是收款配置的APPID为合作商家的APPID,而不是公司APP的APPID. 当 ...

  9. sqlserver - 某字段数据为json串, 获取该json串里的值 的详细方法

    1.前言 某字段的数据为json 但是我想只获取里面的某一个值,该怎么操作? 2.笔记 (1)用 JSON_VALUE(参数1,参数2)函数 ,有两个参数, (2)参数1 为 列名 ,参数2 为 js ...

  10. java 字符串 大小写转换 、去掉首末端空格 、根据索引切割字符 、判断是否含有某连续字符串

    1. 字符串转大写: toUpperCase() 字符串转小写: toLowerCase() @Test public void tt(){ String d = "sdgGHJGjghGH ...