Java并发编程(01):线程的创建方式,状态周期管理

软件发布|下载排行|最新软件

当前位置:首页IT学院IT技术

Java并发编程(01):线程的创建方式,状态周期管理

知了一笑   2020-03-04 我要评论
> 本文源码:[GitHub·点这里](https://github.com/cicadasmile/java-base-parent) || [GitEE·点这里](https://gitee.com/cicadasmile/java-base-parent) # 一、并发编程简介 ## 1、基础概念 - 程序 与计算机系统操作有关的计算机程序、规程、规则,以及可能有的文件、文档及数据。 - 进程 进程是计算机中的程序,关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础。在早期面向进程设计的计算机结构中,进程是程序的基本执行实体;在面向线程设计的计算机结构中,进程是线程的容器。程序是指令、数据及其组织形式的描述,进程是程序的实体。 - 线程 线程是操作系统能够进行运算调度的最小单位,包含在进程之中,是进程中的实际运作单位。一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任务。 - 顺序编程 程序中的所有步骤在任意时刻只能执行一个步骤。编程中绝大部分场景都是基于顺序编程。 - 并发编程 在一台处理器上“同时”处理多个任务,并行处理程序中的复杂耗时任务。并发是在同一实体上的多个事件。多个事件在同一时间间隔发生。 ## 2、入门案例 ```java public class HelloThread { public static void main(String[] args) { System.out.println("Hello,Thread"); // 当前线程名称 System.out.println(Thread.currentThread().getName()); // 线程系统的管理接口 ThreadMXBean threadMXBean = ManagementFactory.getThreadMXBean(); long[] threadIds = threadMXBean.getAllThreadIds() ; for (long id : threadIds) { ThreadInfo threadInfo = threadMXBean.getThreadInfo(id) ; System.out.println(threadInfo.getThreadId()+ ":"+threadInfo.getThreadName()); } } } ``` 打印结果: ``` 5:Monitor Ctrl-Break 4:Signal Dispatcher 3:Finalizer 2:Reference Handler 1:main ``` 由此可知上述一段简单的Java程序,不止一条main线程在执行。 # 二、线程创建方式 ## 1、继承Thread类 Thread类的基础结构: ```java class Thread implements Runnable ``` 这里已经实现了Runnable接口。 ```java public class CreateThread01 { public static void main(String[] args) { // 调用方法 MyThread1 myThread1 = new MyThread1() ; myThread1.start(); } } class MyThread1 extends Thread { // 设置线程名称 public MyThread1 (){ super("CicadaThread"); } @Override public void run() { System.out.println(Thread.currentThread().getName()); } } ``` ## 2、实现Runnable接口 如果创建的线程类已经存在父类,则不能再继承Thread类,在Java中不允许多继承,这时就可以实现Runnable接口。 ```java public class CreateThread02 { public static void main(String[] args) { Thread thread = new Thread(new MyThread2(),"MyThread2") ; thread.start(); } } class MyThread2 implements Runnable { @Override public void run() { System.out.println(Thread.currentThread().getName()+" run ..."); } } ``` ## 3、匿名内部类 在一个类里面定义一个类,称为内部类。内部类就相当于外部类的一个成员,可以把内部类看成一个整体。 ```java public class CreateThread03 { public static void main(String[] args) { //方式1 new Thread("ThreadName1") { public void run() { System.out.println("1:"+Thread.currentThread().getName()); }; }.start(); //方式2 new Thread(new Runnable() { public void run() { System.out.println("2:"+Thread.currentThread().getName()); } },"ThreadName2"){ // 这里重写了run方法 @Override public void run() { System.out.println("3:"+Thread.currentThread().getName()); } }.start(); } } ``` ## 4、返回值线程 顾名思义,该线程线程异步执行后,可以返回线程的处理结果。 ```java public class CreateThread04 { public static void main(String[] args) throws Exception { MyThread4 myThread4 = new MyThread4(); FutureTask

Copyright 2022 版权所有 软件发布 访问手机版

声明:所有软件和文章来自软件开发商或者作者 如有异议 请与本站联系 联系我们