多线程

线程与进程

线程:具有完成特定任务的一条执行路径,是CPU执行的最小单位

进程:正在执行的程序

重点:CPU在某个时间刻度上只能够执行一条原子性语句 字节最小是bit位

原子性语句:不能够再次分割的语句。

CPU执行原理

    1. 除了多核处理器,本质上CPU在某一个时间点上执行了一条线程

    2. CPU看起来像是同时运行,实际上一次只能执行一个线程的一条原子性语句,之所以看起来同时运行,就是因为处理速度非常快。

    3. 在java的线程程序中,采用的是抢占式调度模型

    4. 并发与并行的区别

并发:同一个时间段同时执行

并行:在同一时刻上同时执行,物理上的同时执行。

5.同步与异步的区别

同步:本质就是串行执行,并发情况下会出现同步问题。

异步:能够在处理一个任务的同时还能够处理其他事情。

6.一个进程包含多个线程,一个java进程至少包括了主线程、垃圾回收线程

Thread类

自定义类继承Thread类,重写Thread类里面的run()方法。创建线程对象,启动线程。

启动线程的是start()方法,不是run()方法。一下简单说说开启线程的方式。

    1. 实现Runnable接口方式开启线程

避免Java单继承带来的局限性

适合多个相同程序的代码区处理同一个资源的情况,比如:多个线程实现分割复制视频。

自定义类实现Runnable接口重写run()方法,并把自定义类作为构造参数传给Thread,进而调用thread.start()方法启动线程

好处:有效的数据分离,可以使用多个线程处理一个数据。

2.实现Callable方式开启线程

需要依赖FutureTask类

FutureTask类对接接口RunnableFuture,RunnableFuture接口继承了Runnable、Future接口。所以Callable本质上还是使用了Runnable接口的实例来开启线程。不同的是Callable类可以产生值返回,但是使用get()获取值会堵塞线程。

3.匿名内部类开启线程

没啥好说的就是匿名创建了Thread对象,并开启线程。也可以匿名创建Runnable子类并给Thread调用开启线程,不过两种方式一起使用,优先使用Thread的子类。

设置获取线程的名称

1.通过构造方法

Thread(String name)       创建一个名叫name的线程

Thread(Runnable target,String name)

2.通过线程的成员方法

setName(String name)

getName()

3.通过静态方法

threa.currentThread().getName();获取主线程的名称

getId();获取线程的ID,long类型

线程的优先级

java使用的是抢占式调度模型,优先级高的线程会优先使用CPU,同级别的优先级,则是随机选择,优先级高的获取CPU的时间相对要多一些。

设置获取优先级:

public final int getPriority()    获取线程的优先级

public final void setPriority(int newPriority) 设置线程的优先级

线程的优先级:1~10,10个级别,数值越高优先级越高。系统的优先级,基本上我们无法控制,我们所设置的优先级,只是局部的程序。

线程休眠

Thread.sleep(1000);        阻塞正在执行的线程1秒

线程中断

public final void stop():停止线程,直接终止线程,不会再执行。

public void interrupt();    给子线程抛出一个异常,子线程还可以继续执行。

后台线程

一般来说JVM中会包括两种线程:用户线程、后台线程

后台线程:在程序运行的时候在后台提供的一种通用的服务线程,并且这种线程,并不是程序的必要部分。

当用户线程结束时,会终结所有的后台线程。

比如:程序中主线程结束了,其他子线程也会被强制结束。

线程加入

public final void join();    t1.join:优先让t1线程执行结束。

线程礼让

public static void yield() 使线程让出CPU的执行权,然后和其他线程一起再来抢这个执行权。

Java多线程小总结的更多相关文章

  1. java多线程小题一瞥

    有如下线程类定义: public class MyThread extends Thread { private static int num = 0; public MyThread() { num ...

  2. Java——多线程小例子

    body, table{font-family: 微软雅黑; font-size: 10pt} table{border-collapse: collapse; border: solid gray; ...

  3. Java多线程小例子(三个窗口卖火车票)

    class Ticket implements Runnable{ private int TicketNum = 100; //100张火车票 private boolean flag = true ...

  4. 关于Java多线程的线程同步和线程通信的一些小问题(顺便分享几篇高质量的博文)

    Java多线程的线程同步和线程通信的一些小问题(顺便分享几篇质量高的博文) 前言:在学习多线程时,遇到了一些问题,这里我将这些问题都分享出来,同时也分享了几篇其他博客主的博客,并且将我个人的理解也分享 ...

  5. Java多线程同步问题:一个小Demo完全搞懂

    版权声明:本文出自汪磊的博客,转载请务必注明出处. Java线程系列文章只是自己知识的总结梳理,都是最基础的玩意,已经掌握熟练的可以绕过. 一.一个简单的Demo引发的血案 关于线程同步问题我们从一个 ...

  6. 40个Java多线程问题总结

    前言 Java多线程分类中写了21篇多线程的文章,21篇文章的内容很多,个人认为,学习,内容越多.越杂的知识,越需要进行深刻的总结,这样才能记忆深刻,将知识变成自己的.这篇文章主要是对多线程的问题进行 ...

  7. 第一章 Java多线程技能

    1.初步了解"进程"."线程"."多线程" 说到多线程,大多都会联系到"进程"和"线程".那么这两者 ...

  8. Java多线程开发系列之四:玩转多线程(线程的控制2)

    在上节的线程控制(详情点击这里)中,我们讲解了线程的等待join().守护线程.本节我们将会把剩下的线程控制内容一并讲完,主要内容有线程的睡眠.让步.优先级.挂起和恢复.停止等. 废话不多说,我们直接 ...

  9. Java多线程20:多线程下的其他组件之CountDownLatch、Semaphore、Exchanger

    前言 在多线程环境下,JDK给开发者提供了许多的组件供用户使用(主要在java.util.concurrent下),使得用户不需要再去关心在具体场景下要如何写出同时兼顾线程安全性与高效率的代码.之前讲 ...

随机推荐

  1. Python并发编程之初识异步IO框架:asyncio 上篇(九)

    大家好,并发编程 进入第九篇. 通过前两节的铺垫(关于协程的使用),今天我们终于可以来介绍我们整个系列的重点 -- asyncio. asyncio是Python 3.4版本引入的标准库,直接内置了对 ...

  2. SOLID原则(OOD&OOP)

    SOLID原则是面向对象编程和面向对象设计的头五大原则.学习及应用这五大原则可以构建一个易于维护和扩展的应用程序,我们一起看看到底是那五大原则. S--单一责任原则(SRP) --Single Res ...

  3. 说说new 和 malloc()

    熟悉c++的朋友应该都知道,c++提供给了程序员与硬件打交道的可能性,比如说内存管理.一个高水平的c++程序员可以将c++程序的性能优化到极致,榨干硬件资源.而现在我想说说与内存管理有关的new 和 ...

  4. 《k8s 源码分析》- Custom Controller 之 Informer

    Custom Controller 之 Informer 概述 架构概览 reflector - List & Watch API Server Reflector 对象 ListAndWat ...

  5. JAVA基础第四章-集合框架Collection篇

    业内经常说的一句话是不要重复造轮子,但是有时候,只有自己造一个轮子了,才会深刻明白什么样的轮子适合山路,什么样的轮子适合平地! 我将会持续更新java基础知识,欢迎关注. 往期章节: JAVA基础第一 ...

  6. ASP.NET Core在Azure Kubernetes Service中的部署和管理

    目录 ASP.NET Core在Azure Kubernetes Service中的部署和管理 目标 准备工作 注册 Azure 账户 AKS文档 进入Azure门户(控制台) 安装 Azure Cl ...

  7. JS实现页面复制文字时自动加版权

    经亲自实践,尝试了各种方法,目前可行的方法主要有如下两种: 可以在任何运行使用js代码的网站中使用,比如本人在自己的博客园博客中实现了一下,读者您可亲自在本人博客上测试. 方法1: <scrip ...

  8. 基于promise对小程序http请求方法封装

    原因是我不想每次请求都复制粘贴那么长的请求地址,所以我把前边那一坨请求地址作为基础地址,只传后台给的路由就ok,而且,并不是每次请求都要显示正在加载,这对小程序体验很差,所以,我加了个形参,用来判断是 ...

  9. Windows 下安装RabbitMQ服务器及基本配置

    RabbitMQ是一个在AMQP协议标准基础上完整的,可复用的企业消息系统.它遵循Mozilla Public License开源协议,采用 Erlang 实现的工业级的消息队列(MQ)服务器,Rab ...

  10. IconFont的iOS使用

    IconFont的使用 Iconfont-国内功能很强大且图标内容很丰富的矢量图标库,提供矢量图标下载.在线存储.格式转换等功能.阿里巴巴体验团队倾力打造,设计和前端开发的便捷工具. https:// ...