java线程详解

打印 上一主题 下一主题

主题 855|帖子 855|积分 2565

java线程详解

线程

概念

说到线程,就不得不提进程,为什么呢,因为进程是操作系统进行分配资源和调度的最小单位,比如windows系统安装的应用软件(office、qq、微信等)启动时,由操作系统协调分配资源和调度执行称之为一个进程,进程间是相互独立和隔离的。而线程是进程最小执行单位,一个进程的执行过程中可以有多个线程,这样可以发挥多核CPU的能力,提高执行效率。
java中的线程不是由操作系统直接调度,而且通过java虚拟机与操作系统进行指令交互完成。所以对于java程序员来说,使用线程非常简单,只需要在语言层面编写完代码,交给虚拟机运行,剩下的脏活累活在底层就由java虚拟机完成,使用线程一时爽,一直使用一直爽(哈哈,虽然多线程能充分压榨CPU,但是用不好的话也会产生许多问题,比如并发导致的数据错误、系统负载飙升等)。
基本用法

有两种方式来创建线程
1、一种是实现Runnable接口,然后利用Thread类的构造函数传入Runnable接口创建Thread实例。
2、另外一种是继承Thread。
1、实现Runnable
  1. class WorkerThread1 implements Runnable {
  2.     @Override
  3.     public void run() {
  4.         System.out.println(Thread.currentThread().getName() + "执行完成");
  5.     }
  6. }
复制代码
2、继承Thread
  1. class WorkerThread2 extends Thread {
  2.     @Override
  3.     public void run() {
  4.         System.out.println(Thread.currentThread().getName() + "执行完成");
  5.     }
  6. }
复制代码
测试用例:
  1. public static void main(String[] args) {
  2.     test1();
  3. }
  4. private static void test1() {
  5.     new Thread(new WorkerThread1(), "t1").start();
  6.     Thread t2 = new WorkerThread2();
  7.     t2.setName("t2");
  8.     t2.start();
  9. }
复制代码
输出:
注意这里的执行顺序不一定是t1先输出,也可能是t2先输出,因为线程启动后只是准备就绪,最终需要等待操作系统调度执行才能执行。
  1. t1执行完成
  2. t2执行完成
复制代码
这两种方式都可以创建线程并执行,细心的读者可能看过源码发现其实Thread类也实现了Runnable接口。如果自己的类已经继承了别的类,那么可以实现Runnable接口创建线程,否则可以继承Thread类复写run()方法即可。
注意:要让线程执行需要调用start()方法,这样虚拟机才能创建一个线程等待操作系统调度,直接执行run()方法则是在当前线程直接调用该方法,同步执行,不会再创建线程。
线程状态及流转

线程的生命周期可用状态表示,总共有6种状态,
Thread类的源码里我们可以看到有个枚举类State。
  1. public enum State {
  2.     // 新建状态,被new出来后,还未调用start方法
  3.     NEW,
  4.     // 可运行状态,线程已就绪,获取到CPU资源就运行,运行中就是Running状态
  5.     RUNNABLE,
  6.     // 阻塞状态,比如在等待锁对象,或者读取流等待
  7.     BLOCKED,
  8.     // 等待状态,比如在等待锁对象,需要被notify唤醒处于就绪状态,获取到CPU资源就运行
  9.     WAITING,
  10.     // 带有超时时间的等待,时间过后自动返回继续执行,比如sleep或者wait(long time)
  11.     TIMED_WAITING,
  12.     // 终止状态,自然停止或者抛出异常停止
  13.     TERMINATED;
  14. }
复制代码
状态流转图:

属性及方法

属性

常用并且需要关注的属性如下:
[code]private int priority;// 线程优先级,1

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

半亩花草

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表