【线程创建的两种方式】

【线程的生命周期】


● 就绪:创建了线程对象后,调用了线程的start()。
(注意:此时线程只是进入了线程队列,等待获取CPU服务,具备了运行的条件,但并不一定已经开始运行了)。
● 运行:处于就绪状态的线程,一旦获取了CPU资源,便进入到运行状态,开始执行run()里面的逻辑。
● 终止:线程的run()执行完毕,或者线程调用了stop(),线程便进入终止状态。
● 阻塞:一个正在执行的线程在某些情况下,由于某种原因而暂时让出了CPU资源,暂停了自己的执行,
便进入了阻塞状态,如调用了sleep()等。

【Java线程有两类】
用户线程:运行在前台,执行具体任务。程序的主线程、连接网络的子线程等都是用户线程。

守护线程:运行在后台,为其他前台线程服务。
特点:一旦所有用户线程都结束运行,守护线程会随JVM一起结束工作。
应用:数据库连接池中的检测线程;JVM虚拟机启动后的检测程线程。
最常见的守护线程:垃圾回收线程。

如何设置守护线程:
可以通过调用Thread类的setDaemon(true)来设置当前的线程为守护线程。

注意事项:
● setDaemon(true)必须在start()之前调用,否则会抛出IllegalThreadStateException异常。
● 在守护线程中产生的新线程也是守护线程。
● 不是所有的任务都可以分配给守护线程来执行,比如读写操作或者计算逻辑(中间中断等,这种情况守护线程也就没必要存在了)。

【守护线程代码实例】

 import java.io.File;
import java.io.FileOutputStream;
import java.io.OutputStream;
import java.util.Scanner; public class DaemonThreadDemo { public static void main(String[] args) {
System.out.println("进入主线程:" + Thread.currentThread().getName()); DaemonThread daemonThread = new DaemonThread();
Thread thread = new Thread(daemonThread);
thread.setDaemon(true);
thread.start(); // 从键盘接收输入,
Scanner sc = new Scanner(System.in);
sc.next(); // 主线程就会阻塞住了
// 一旦我们执行了输入操作,阻塞就会解除掉。主线程会继续执行。然后打印下面一行数据。 System.out.println("退出主线程:" + Thread.currentThread().getName());
}
} class DaemonThread implements Runnable { @Override
public void run() {
// TODO Auto-generated method stub
System.out.println("进入守护线程:" + Thread.currentThread().getName());
try {
writeToFile();
} catch (Exception e) {
e.printStackTrace();
}
System.out.println("退出守护线程:" + Thread.currentThread().getName());
} private void writeToFile() throws Exception {
File filename = new File("b:" + File.separator + "daemon.txt");
OutputStream os = new FileOutputStream(filename, true);
int count = 0;
while(count < 999) {
os.write(("\r\nword" + count).getBytes());
System.out.println("守护线程" + Thread.currentThread().getName()
+ "向文件中写入word" + count++);
Thread.sleep(1000);
}
} }

【使用jstack生成线程快照】
作用:生成JVM当前时刻线程的快照(thraddump,即当前进程中所有线程的信息)。

目的:帮助定位程序问题出现的原因,如长时间停顿、CPU占用率过高等。

目录:X:\jdk\bin

细说多线程之Thread VS Runnable的更多相关文章

  1. 慕课网_细说多线程之Thread VS Runnable

    第1章 课前准备 1-1 前言 (00:49) 第2章 Thread VS Runnable 2-1 回顾线程创建的两种方式 (02:33) 继承Thread类 class MyThread exte ...

  2. 细说多线程之Thread与Runnable

    1:创建线程的两种方式: 继承Thread类 public class MyThread extends Thread { @Override public void run() { } } MyTh ...

  3. Java多线程之Thread、Runnable、Callable及线程池

    一.多线程 线程是指进程中的一个执行流程,一个进程中可以有多个线程.如java.exe进程中可以运行很多线程.进程是运行中的程序,是内存等资源的集合,线程是属于某个进程的,进程中的多个线程共享进程中的 ...

  4. 三、多线程之Thread与Runnable的区别

    Thread与Runnable的区别(用三个窗口同时出售10张车票为例子) 运行代码 运行结果 分析 System.out.println("开始测试多线程");class MyT ...

  5. Android线程之Thread 、Runnable 的两个例子

    Thread例子: package fy.test; import android.app.Activity; import android.os.Bundle; import android.os. ...

  6. 多线程编程(三)--创建线程之Thread VS Runnable

    前面写过一篇基础的创建多线程的博文: 那么本篇博文主要来对照一下这两种创建线程的差别. 继承Thread类: 还拿上篇博客的样例来说: 四个线程各自卖各自的票,说明四个线程之间没有共享,是独立的线程. ...

  7. 多线程之thread和runnable

    Runnanle方式可以避免Thread由于单继承特性带来的缺陷. Runnable代码可以被多个线程(thread实例)共享,适用于多个线程处理同一资源的情况. 线程的生命周期:创建,就绪,阻塞,运 ...

  8. Java基础-进程与线程之Thread类详解

    Java基础-进程与线程之Thread类详解 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.进程与线程的区别 简而言之:一个程序运行后至少有一个进程,一个进程中可以包含多个线程 ...

  9. iOS多线程之Thread

    多线程 • Thread 是苹果官方提供的,简单已用,可以直接操作线程对象.不过需要程序员自己管理线程的生命周期,主要是创建那部分 优缺点 面向对象,简单易用 直接操作线程对象 需要自己管理线程生命周 ...

随机推荐

  1. 项目启动报错:No suitable driver found for jdbc:oracle:thin:@192.168.7.146:1521:oracle

    No suitable driver found for jdbc:oracle:thin:@192.168.7.146:1521:oracle 这个错误的原因主要有以下几方面的原因: 1. url配 ...

  2. T-sql isnull函数介绍

    今天在给同事调取数据的时候,同事反馈说数据偏少,我仔细检查,发现sql语句条件都正确,逻辑没哪里不对,最后经过仔细排查,才发现问题出在null字段上 表中有一列是允许为null值,比如查询名字不为测试 ...

  3. Chisel Tutorial(六)——port

    下面内容根据2015-7-10版的Chisel 2.2 Tutorial整理 port就是硬件单元对外的接口,须要指明方向(输入还是输出).一个port声明的样例例如以下: class Decoupl ...

  4. oblique perspective projection

    参考: https://en.wikibooks.org/wiki/GLSL_Programming/Vertex_Transformations <3D游戏与计算机图形学中的数学方法>E ...

  5. php容易忽视的地方

    一:bool in_array ( mixed $needle , array $haystack [, bool $strict ] ) 用的时候加最后一个参数,判断类型 <?php $a = ...

  6. 点滴积累【C#】---C#实现上传word以流形式保存到数据库和读取数据库中的word文件。

    本文修改来源:http://www.cnblogs.com/zmgdpg/archive/2005/03/31/129758.html 效果: 数据库: 思路: 首先保存word到数据库:获取上传文件 ...

  7. MySQL主从同步那点事儿

    一.前言 关于mysql主从同步,相信大家都不陌生,随着系统应用访问量逐渐增大,单台数据库读写访问压力也随之增大,当读写访问达到一定瓶颈时,将数据库的读写效率骤然下降,甚至不可用;为了解决此类问题,通 ...

  8. python2和python3中str,bytes区别

    python2中,有basestring.str.bytes.unicode四种类型 其中str == bytes ,basestring = (str,unicode) >>> i ...

  9. 第一个MICO CORBA demo实录

    因为忙于其他事情没有仔细去学习CORBA原理,也就大概根据网上的教程搭了一个使用MICO的demo 记录如下. 这里的话,代码我就不贴了,程序也不详细解释了,因为项目文件夹里有一个PPT详细解释了这个 ...

  10. traceroute/tracert--获取网络路由路径

    traceroute 是用来检测发出数据包的主机到目标主机之间所经过的网关数量的工具.traceroute 的原理是试图以最小的TTL发出探测包来跟踪数据包到达目标主机所经过的网关,然后监听一个来自网 ...