美文网首页
一、并发编程基础

一、并发编程基础

作者: starlightGeek | 来源:发表于2017-07-18 16:50 被阅读0次

    (一)线程简介

    1、什么是线程

    线程是CPU独立运行和独立调度的基本单位(可以理解为一个进程中执行的代码片段),进程是资源分配的基本单位(进程是一块包含了某些资源的内存区域)。进程是线程的容器,真正完成代码执行的是线程,而进程则作为线程的执行环境。一个程序至少包含一个进程,一个进程至少包含一个线程,这些线程都拥有各自的计数器、堆栈、和局部变量等属性,一个进程中的多个线程共享当前进程所拥有的资源。

    2、为什么要使用多线程

    (1)更多的处理器核心
    (2)更快的相应时间
    (3)更好的编程模型

    3、线程的状态

       java线程在运行的生命周期中可能处于表中6钟不同的状态,在给定的一个时刻,线程只能处于其中的某一个状态。
    

    运行下面一段代码:

    public class ThreadState {
        public static void main(String[] args) {
            new Thread(new TimeWaiting(),"TimeWaitingThread").start();
            new Thread(new Waiting(),"WaitingThread").start();
            
            new Thread(new Blocked(),"BlockedThread-1").start();
            new Thread(new Blocked(),"BlockedThread-2").start();
        }
        
        static class TimeWaiting implements Runnable {
            public void run() {
                while(true) {
                    try {
                        Thread.sleep(1000);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }
            }
        }
        
        static class Waiting implements Runnable {
            public void run() {
                while(true) {
                    synchronized (Waiting.class) {
                        try {
                            Waiting.class.wait();
                        } catch (InterruptedException e) {
                            e.printStackTrace();
                        }
                    }
                }
            }
        }
        
        static class Blocked implements Runnable {
            public void run() {
                synchronized (Blocked.class) {
                    while(true) {
                        try {
                            Thread.sleep(1000);
                        } catch (InterruptedException e) {
                            e.printStackTrace();
                        }
                    }
                }
            }
        }
    }
    

    使用jdk/bin目录下jps命令:

    image.png

    然后使用:jstack 2499命令可以看到结果如下图:BlockedThread-1进入锁,一直在等待,状态为TIME_WAITING;BlockedThread-2为Blocked状态,WaitingThread为WAITING状态;TimeWaitingThread线程为TIME_WAITING状态。


    image.png

    通过实例,我们了解了java程序运行中线程状态的具体含义,线程在自身的生命周期中,不是始终处于某个状态,而是不停的变换状态。

    image.png

    相关文章

      网友评论

          本文标题:一、并发编程基础

          本文链接:https://www.haomeiwen.com/subject/hiehkxtx.html