本节主要说明以下三个问题

  1. start()的启动顺序不代表线程的启动顺序
  2. yeild的作用
  3. 守护线程

1、start()与线程启动顺序

package foreverly.cn.chapter1;

public class MyThread extends Thread {
private int number;
public MyThread(int num) {
super();
number = num;
}
@Override
public void run( ) {
super.run();
System.out.println("Mythread---"+number+"start");
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println("Mythread---"+number+"end");
} }
package foreverly.cn.chapter1;

public class TestMain {
public static void main(String[] args) {
MyThread mythread1 = new MyThread(1);
MyThread mythread2 = new MyThread(2);
MyThread mythread3 = new MyThread(3);
MyThread mythread4 = new MyThread(4);
MyThread mythread5= new MyThread(5); mythread1.start();
mythread2.start();
mythread3.start();
mythread4.start();
mythread5.start();
System.out.println(Thread.currentThread().getName());
} }

输出结果:

main
Mythread---5start
Mythread---3start
main
Mythread---4start
Mythread---1start
Mythread---2start
Mythread---5end
Mythread---4end
Mythread---3end
Mythread---2end
Mythread---1end

在main方法中,设置了start的顺序为1、2、3、4、5,但线程的启动顺序与之无关。

容易产生的误解是main线程是第一个线程。由输出看出,main也并不”特殊“。

2、 yield作用

yield()方法的作用是让线程放弃当前的CPU资源,但这并不意味着会切换为其他线程。让出的时间不确定有多长,有可能刚让出又立马获得。

package foreverly.cn.chapter1;

public class YieldThread extends Thread{
@Override
public void run() {
long beginTime = System.currentTimeMillis();
int count = 0;
for (int i = 0; i < 5000; i++) {
// Thread.yield();
count += i;
}
long endTime = System.currentTimeMillis();
System.out.println("用时:"+(endTime-beginTime)+"毫秒");
}
}
package foreverly.cn.chapter1;

public class YieldTest {
public static void main(String[] args) {
Thread thread = new YieldThread();
thread.start();
}
}

有注释的情况(即不用yield):

用时:1毫秒

取消注释

用时:21毫秒

3、守护线程

守护线程是一种特殊的线程,通过setDaemon(true)可将线程设置为守护线程。

守护线程含有陪伴的意义。如果没有了非守护线程,守护线程就会自动销毁(无论执行到哪里)。GC(垃圾回收)就是一种典型的守护线程。

java中start()、yield、setDeamon()的更多相关文章

  1. 可惜Java中没有yield return

    项目中一个消息推送需求,推送的用户数几百万,用户清单很简单就是一个txt文件,是由hadoop计算出来的.格式大概如下: uid caller 123456 12345678901 789101 12 ...

  2. Java中的yield关键字的简单讲解

    Thread.yield()方法作用是:暂停当前正在执行的线程对象,并执行其他线程. yield()应该做的是让当前运行线程回到可运行状态,以允许具有相同优先级的其他线程获得运行机会.因此,使用yie ...

  3. Java中的进程和线程

     Java中的进程与线程 一:进程与线程 概述:几乎任何的操作系统都支持运行多个任务,通常一个任务就是一个程序,而一个程序就是一个进程.当一个进程运行时,内部可能包括多个顺序执行流,每个顺序执行流就是 ...

  4. Java中的进程与线程(总结篇)

    详细文档: Java中的进程与线程.rar 474KB 1/7/2017 6:21:15 PM 概述: 几乎任何的操作系统都支持运行多个任务,通常一个任务就是一个程序,而一个程序就是一个进程.当一个进 ...

  5. Java中的多线程你只要看这一篇就够了

    学习Java的同学注意了!!! 学习过程中遇到什么问题或者想获取学习资源的话,欢迎加入Java学习交流群,群号码:279558494 我们一起学Java! 引 如果对什么是线程.什么是进程仍存有疑惑, ...

  6. java中的多线程

    什么是多线程? 首先得知道什么是线程? 线程是一组指令的集合,或者是程序的特殊段,它可以在程序里独立执行.也可以把它理解为代码运行的上下文.所以线程基本上是轻量级的进程,它负责在单个程序里执行多任务. ...

  7. (转)java中的进程与线程

    (转自地址http://www.ibm.com/developerworks/cn/java/j-lo-processthread/) Java 进程的建立方法 在 JDK 中,与进程有直接关系的类为 ...

  8. java编程思想-java中的并发(二)

    二.共享受限资源 有了并发就可以同时做多件事情了.但是,两个或多个线程彼此互相干涉的问题也就出现了.如果不防范这种冲突,就可能发生两个线程同时试图访问同一个银行账户,或向同一个打印机打印,改变同一个值 ...

  9. java中多线程中Runnable接口和Thread类介绍

    java中的线程时通过调用操作系统底层的线程来实现线程的功能的. 先看如下代码,并写出输出结果. // 请问输出结果是什么? public static void main(String[] args ...

  10. 聊聊并发(七)——Java中的阻塞队列

    3. 阻塞队列的实现原理 聊聊并发(七)--Java中的阻塞队列 作者 方腾飞 发布于 2013年12月18日 | ArchSummit全球架构师峰会(北京站)2016年12月02-03日举办,了解更 ...

随机推荐

  1. codevs 1094 FBI树 2004年NOIP全国联赛普及组 x

                         题目描述 Description 我们可以把由“0”和“1”组成的字符串分为三类:全“0”串称为B串,全“1”串称为I串,既含“0”又含“1”的串则称为F串. ...

  2. 使用Python操作Excel文档(一)

    Python | 使用Python操作Excel文档(一) 0 前言 在阅读本文之前,请确保您已满足或可能满足以下条件: 请确保您具备基本的Python编程能力. 请确保您会使用Excel. 请确保您 ...

  3. TNS-12560: TNS: 协议适配器错误

    TNS-12560: TNS: 协议适配器错误   Microsoft Windows [版本 5.2.3790] (C) 版权所有 1985-2003 Microsoft Corp. C:\Docu ...

  4. 创建docker静态化IP

    配置桥接网络 桥接本地物理网络的目的,是为了局域网内用户方便访问 docker 实例中服务,不需要各种端口映射即可访问服务. 但是这样做,又违背了 docker 容器的安全隔离的原则,工作中辩证的选择 ...

  5. (十一)C语言之选择结构

  6. uniapp导航栏自定义按钮及点击事件

    本文链接:https://blog.csdn.net/qq_33807889/article/details/89945674第一步:显示按钮假设页面名称为:AddSort 在pages.json中找 ...

  7. TCP->IP输出 之 ip_queue_xmit、ip_build_and_send_pkt、ip_send_unicast_reply

    概述 ip_queue_xmit是ip层提供给tcp层发送回调,大多数tcp发送都会使用这个回调,tcp层使用tcp_transmit_skb封装了tcp头之后,调用该函数,该函数提供了路由查找校验. ...

  8. UFLDL(Unsupervised Feature Learning and Deep Learning)

    UFLDL(Unsupervised Feature Learning and Deep Learning)Tutorial 是由 Stanford 大学的 Andrew Ng 教授及其团队编写的一套 ...

  9. k8s简单介绍

    k8s是什么? 它是用来解决容器部署,调度,伸缩等基础的功能的软件 k8s的优点? 易学:轻量级,简单,容易理解 便携:支持公有云,私有云,混合云,以及多种云平台 可拓展:模块化,可插拔,支持钩子,可 ...

  10. Cookie实战案例代码

    import java.io.IOException; import java.text.SimpleDateFormat; import java.util.Date; import javax.s ...