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

  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. 家庭问题x

    [问题描述] 有n个人,编号为1,2,……n,另外还知道存在K个关系.一个关系的表达为二元组(α,β)形式,表示α,β为同一家庭的成员. 当n,k和k个关系给出之后,求出其中共有多少个家庭.最大的家庭 ...

  2. Loooooooooooooooong time no see!

    好久没来啦~去年这会一口气写了好多,是因为即将离职,在公司闲的没事,再加上也积累了一些东西想分享. 最近有个朋友给我私信求助,才又想起这里.这快一年时间,又学习了不少东西.从何写起呢,哈哈,不知道啊~ ...

  3. 顺序表应用6:有序顺序表查询(SDUT 3330)

    Problem Description 顺序表内按照由小到大的次序存放着n个互不相同的整数,任意输入一个整数,判断该整数在顺序表中是否存在.如果在顺序表中存在该整数,输出其在表中的序号:否则输出&qu ...

  4. AcWing:145. 超市(贪心 + 小根堆 or 贪心 + 并查集)

    超市里有N件商品,每个商品都有利润pipi和过期时间didi,每天只能卖一件商品,过期商品(即当天di<=0di<=0)不能再卖. 求合理安排每天卖的商品的情况下,可以得到的最大收益是多少 ...

  5. Python使用otp实现二步验证

    https://www.cnblogs.com/lori/p/11077161.html https://blog.coding.net/blog/two-factor-authentication ...

  6. IDEA远程执行详解

    新建一个springboot项目 新建一个java class: @RestController public class TestController { @RequestMapping(" ...

  7. python3笔记二十:时间操作time

    一:学习内容 time时间戳 time元组 time字符串 time时间转换图解 二:time 需要引入:import time 1.概念 UTC(世界协调时间):格林尼治天文时间,世界标准时间,在中 ...

  8. LeetCode 145. 二叉树的后序遍历(Binary Tree Postorder Traversal)

    题目描述 给定一个二叉树,返回它的 后序 遍历. 示例: 输入: [1,null,2,3] 1 \ 2 / 3 输出: [3,2,1] 进阶: 递归算法很简单,你可以通过迭代算法完成吗? 解题思路 后 ...

  9. vue使用laydate.js插件报错laydate.css: Invalid

    在vue中使用laydate.js插件时可能会碰到laydate.css: Invalid这样子的一个报错 然后导致laydate日期控件无法使用. 这主要是因为laydate.js中引入的layda ...

  10. android 知识体系