IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Java知识库 -> Java多线程精讲:1、进程和线程介绍 -> 正文阅读

[Java知识库]Java多线程精讲:1、进程和线程介绍

1.1 线程相关概念

进程:

????????进程(process)是计算机中的程序关于某数据集合一次运行活动,是操作系统进行资源分配和调度的基本单位。

? ? ? ? 可以把进程简单理解为操作系统中正在运行的一个程序。

线程:

? ? ? ? 线程(Thread)是进程的一个执行单元。

? ? ? ? 一个线程是进程中一个单一顺序的控制流,进程的一个执行分支。

? ? ? ? 进程是线程的容器,一个进程至少有一个线程。

? ? ? ? 在操作系统中,进程是分配资源的基本单位,如虚拟存储空间、文件描述符等。在进程中,每个线程都有各自的线程栈,自己的寄存器环境,自己的线程本地存储。

主线程和子线程:

? ? ? ? JVM启动时会创建一个主线程,该主线程负责执行main方法。主线程就是执行main方法的线程。

? ? ? ? JAVA中的线程不是孤立的,线程之间也会存在一些联系。如果A线程创建了B线程,那么A线程就是B线程的父线程,B线程就是A线程的子线程。

?1.2 串行、并发和并行:

假设有3个任务:A准备5分钟,等待5分钟;B准备2分钟,等待8分钟;C准备10分钟。

串行:sequential,所有任务逐个完成

10 + 10 + 10 = 30分钟

并发:concurrent,在任务A等待的过程中,开始做任务B,任务B等待的过程中启动任务C

5 + 2 + 10 = 17分钟

并行:parallel,三个任务同时开始

10分钟

1.3 线程的创建和启动

在Java中,创建一个线程就是创建一个Thread类(或子类)的对象(或称实例)。

Thread类有两个常用的构造方法:

Thread();
Thread(Runnable target);

创建线程的两种方法:

1、继承Thread类,并重写run方法:

package createThread.p1;

/**
 * 1、定义Thread类的子类
 */

public class MyThread extends Thread{
    //2、重写Thread类的run方法
    //run()方法体内的内容就是线程要执行的代码
    @Override
    public void run() {
        System.out.println("这是子线程执行的内容");
    }

    public static void main(String[] args) {
        //3、创建线程对象
        MyThread myThread = new MyThread();
        //4、启动线程
        myThread.start();
        /**
         * 调用线程的start()方法来启动线程,启动线程的实质是请求JVM运行相应的线程,这个线程具体什么时候运行,由线程调度器(scheduler)决定
         * 注意:
         *   调用start()方法不代表线程能立马运行
         *   线程启动后会运行run()方法
         *   如果启动了多个线程,start()调用的顺序不一定就是线程启动的顺序
         */
    }
}

2、实现runnable接口来创建线程

package createThread.p2;

//1、继承Runnable接口
public class MyRunable implements Runnable{

    //2、实现run方法
    @Override
    public void run() {
        System.out.println("This is a thread");
    }

    public static void main(String[] args) {
        //3、将实现了Runnable接口的对象传入Thread的构造方法中
        Thread thread = new Thread(new MyRunable());
        //4、启动线程
        thread.start();
    }
}

1.4 线程的常用方法?

1、currentThread()

Java中的任何一段代码,都是运行在某个线程中的。使用如下方法可以获得运行当前代码的线程。

Thread.currentThread()

2、setName()/getName()

通过设置线程名称,有助于程序调试,提高程序的可读性,建议为每个线程设置一个名称。

thread.setName(线程名称);  //设置线程名称
thread.getName();         //获得线程名称

3、isAlive

判断线程是否处于活动状态(只要启动了,然后还没终止,那就是活着的线程)

thread.isAlive();

4、sleep

让当前线程休眠指定的毫秒数,当前线程指的是Thread.currentThread()返回的线程

Thread.sleep(millis);  //让当前线程休眠指定的毫秒数
TimeUnit.SECONDS.sleep(seconds);  //显示地知道休眠的时间

5、getId

thread.getId() 可以获得线程的唯一标识。

注意:如果某个编号运行结束,该编号可能被后续创建的线程使用。

重启了JVM后,同一个线程的编号可能不同了。

6、yield

Thead.yield():放弃当前的CPU资源,然后由CPU重新进行调度。

7、setPriority

thread.setPriority(num) :设置线程的优先级,num的取值范围是1~10。如果超出这个范围会抛出异常IllegalArgumentException。

在操作系统中,优先级较高的线程获得CPU的机会越多

线程优先级本质上只是给线程调度器一个提示信息,以便于调度器决定先调度哪些线程。注意不能保证让优先级高的线程先运行。

Java优先级设置不当或者滥用,可能会导致某些线程永远无法得到运行,即产生了线程饥饿。

线程的优先级并不是设置得越高越好,一般情况下使用普通的默认的优先级即可。

线程的优先级具有继承性,在A线程中创建了B线程,则B线程的优先级和A线程的优先级是一样的

8、interrupt

调用某一线程的interrupt方法,仅仅是在当前线程打一个停止标志,并不是真正的停止线程。

9、setDaemon

Java中的线程分为用户线程和守护线程

守护线程是为其他县城提供服务的县城,如垃圾回收器(GC)。

守护线程不能单独运行,当Java虚拟机中没有其他用户线程,只有守护线程时,守护线程会自动销毁。

  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2021-08-26 11:59:28  更:2021-08-26 11:59:52 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 9:00:16-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码