深入浅出多线程——线程基础篇

  • 概述

  多线程是java编程中非常重要的一块,在多核CPU时代,多线程是最直接提高程序执行效率的途径。所以学好多线程对我们极其重要。

  • Java多线程的基本应用

  创建多线程有两种方式:

    1,继承Thread类

/**
 * @author itunic.com
 * 继承Thread实现多线程
 * @see Thread
 */
public class RunThread extends Thread {

    /**
     * 线程执行内容。
     */
    @Override
    public void run() {
        System.out.println("Thread execution content!");
    }

    public static void main(String[] args) {
        //创建线程对象
        RunThread rt = new RunThread();
        //启动rt线程
        rt.start();
    }
}

    2,实现Runnable接口

/**
 * @author itunic.com
 * Runnable接口实现多线程
 * @see Runnable
 */
public class RunnableThread implements Runnable {

    /**
     * 线程执行内容。
     */
    @Override
    public void run() {
        System.out.println("Thread execution content!");
    }

    public static void main(String[] args) {
        //创建线程对象
        Thread t = new Thread(new RunnableThread());
        //启动t线程
        t.start();
    }
  • Java多线程的6种状态

  根据官方定义,线程状态分为:NEWRUNNABLEBLOCKEDWAITING、TIMED_WAITING、TERMINATED六种状态。

  NEW: 线程尚未启动处于该状态。也就是说 new Thread 之后,调用start方法之前所处于的状态。

  RUNNABLE: 线程处于JVM运行状态,但可能正等待操作系统的执行调度。

  BLOCKED: 线程阻塞状态,导致该状态的原因通常是它处于临界资源池,等待一个“锁”。

  WAITING:通常是指线程拥有对象锁后进入相应的区域,调用锁对象的wait()方法后产生的一种结果。除此之外,还有变相的实现方式:Thread.join()、LockSupport.park()等。

  TIMED_WAITING:与WAITING状态类似,不同的是TIMED_WAITING拥有超时设置,当超过设置的时间,该状态自动变为RUNNABLE状态。导致该状态的实现方式有:Thread.sleep(long timeout)、Thread.join(long timeout)、Object.wait(long timeout)、LockSupport.parkNanos、LockSupport.parkUntil等。

  TERMINATED:该状态与NEW状态一样为JVM内部状态,不会映射到操作系统的线程状态。该状态为线程结束后的状态,表示线程执行完毕。

  • 结语

  本文介绍了java多线程的实现方式及运行状态,算是一篇《深入浅出多线程》系列的引言。本博客仅仅想把自己掌握的东西做一些沉淀及反思,方便本人及有需要的人查阅。对该系列有兴趣的朋友可以关注我。

时间: 2024-11-20 01:22:16

深入浅出多线程——线程基础篇的相关文章

多线程(基础篇1)

在多线程这一系列文章中,我们将讲述C#语言中多线程的相关知识,在多线程(基础篇)中我们将学习以下知识点: 创建线程 中止线程 线程等待 终止线程 确定线程的状态 线程优先级 前台线程和后台线程 向线程传递参数 使用C#的lock关键字锁定线程 使用Monitor锁定线程 处理异常 一.创建线程 在整个系列文章中,我们主要使用Visual Studio 2015作为线程编程的主要工具.在C#语言中创建.使用线程只需要按以下步骤编写即可: 1.启动Visual Studio 2016,新建一个控制台

多线程(基础篇3)

在上一篇多线程(基础篇2)中,我们主要讲述了确定线程的状态.线程优先级.前台线程和后台线程以及向线程传递参数的知识,在这一篇中我们将讲述如何使用C#的lock关键字锁定线程.使用Monitor锁定线程以及线程中的异常处理. 九.使用C#的lock关键字锁定线程 1.使用Visual Studio 2015创建一个新的控制台应用程序. 2.双击打开"Program.cs"文件,然后修改为如下代码: 1 using System; 2 using System.Threading; 3 u

多线程(基础篇1)转载

在多线程这一系列文章中,我们将讲述C#语言中多线程的相关知识,在多线程(基础篇)中我们将学习以下知识点: 创建线程 中止线程 线程等待 终止线程 确定线程的状态 线程优先级 前台线程和后台线程 向线程传递参数 使用C#的lock关键字锁定线程 使用Monitor锁定线程 处理异常 一.创建线程 在整个系列文章中,我们主要使用Visual Studio 2015作为线程编程的主要工具.在C#语言中创建.使用线程只需要按以下步骤编写即可: 1.启动Visual Studio 2016,新建一个控制台

Java多线程系列--“基础篇”09之 interrupt()和线程终止方式

概要 本章,会对线程的interrupt()中断和终止方式进行介绍.涉及到的内容包括:1. interrupt()说明2. 终止线程的方式2.1 终止处于“阻塞状态”的线程2.2 终止处于“运行状态”的线程3. 终止线程的示例4. interrupted() 和 isInterrupted()的区别 转载请注明出处:http://www.cnblogs.com/skywang12345/p/3479949.html 1. interrupt()说明 在介绍终止线程的方式之前,有必要先对inter

Java多线程系列--“基础篇”10之 线程优先级和守护线程

概要 本章,会对守护线程和线程优先级进行介绍.涉及到的内容包括:1. 线程优先级的介绍2. 线程优先级的示例3. 守护线程的示例 转载请注明出处:http://www.cnblogs.com/skywang12345/p/3479982.html 1. 线程优先级的介绍 java 中的线程优先级的范围是1-10,默认的优先级是5.“高优先级线程”会优先于“低优先级线程”执行. java 中有两种线程:用户线程和守护线程.可以通过isDaemon()方法来区别它们:如果返回false,则说明该线程

Java多线程系列--“基础篇”06之 线程让步

概要 本章,会对Thread中的线程让步方法yield()进行介绍.涉及到的内容包括:1. yield()介绍2. yield()示例3. yield() 与 wait()的比较 转载请注明出处:http://www.cnblogs.com/skywang12345/p/3479243.html 1. yield()介绍 yield()的作用是让步.它能让当前线程由“运行状态”进入到“就绪状态”, 从而让其它具有相同优先级的等待线程获取执行权:但是,并不能保证在当前线程调用yield()之后,其

Java多线程系列---“基础篇”05之 线程等待与唤醒

转自:https://www.cnblogs.com/skywang12345/p/3479224.html  (含部分修改) 概要 本章,会对线程等待/唤醒方法进行介绍.涉及到的内容包括: wait(), notify(), notifyAll()等方法介绍 wait()和notify() wait(long timeout)和notify() wait() 和 notifyAll() 为什么notify(), wait()等函数定义在Object中,而不是Thread中 一. wait(),

Java多线程系列---“基础篇”07之 线程休眠

转自:http://www.cnblogs.com/skywang12345/p/3479256.html   (含部分修改) 概要 本章,会对Thread中sleep()方法进行介绍.涉及到的内容包括: sleep()介绍 sleep()示例 sleep() 与 wait()的比较 一. sleep()介绍 sleep() 定义在Thread.java中.sleep() 的作用是让当前线程休眠,即当前线程会从"运行状态"进入到"休眠(阻塞)状态".sleep()会

多线程(基础篇)

相关概念 进程是指一个内存中运行的应用程序,每个进程都有自己独立的一块内存空间,一个进程中可以启动多个线程. 一个进程是一个独立的运行环境,它可以被看作一个程序或者一个应用.而线程是在进程中执行的一个任务.Java运行环境是一个包含了不同的类和程序的单一进程.线程可以被称为轻量级进程.线程需要较少的资源来创建和驻留在进程中,并且可以共享进程中的资源. 多线程程序中,多个线程被并发的执行以提高程序的效率,CPU不会因为某个线程需要等待资源而进入空闲状态.多个线程共享堆内存(heap memory)