多线程

线程与进程

线程:具有完成特定任务的一条执行路径,是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. 网页的cdn引用地址,js,react,bootstrap

    react+----这三个够用了 <script src="https://cdn.bootcss.com/react/15.4.2/react.min.js">< ...

  2. zabbix微信报警信息优化模板

    --------------------------------告警模板1-------------------------------------- 默认标题 告警项目: {TRIGGER.NAME ...

  3. 如何在MySQL中查询每个分组的前几名【转】

    问题 在工作中常会遇到将数据分组排序的问题,如在考试成绩中,找出每个班级的前五名等. 在orcale等数据库中可以使用partition语句来解决,但在mysql中就比较麻烦了.这次翻译的文章就是专门 ...

  4. 折腾Java设计模式之解释器模式

    解释器模式 解释器模式是类的行为模式.给定一个语言之后,解释器模式可以定义出其文法的一种表示,并同时提供一个解释器.客户端可以使用这个解释器来解释这个语言中的句子. 意图 给定一个语言,定义它的文法表 ...

  5. Oracle数据库知识要点

    一.卸载安装(来自百度经验) 完全卸载: 1. 停止相关服务 2. 运行Universal Installer,卸载产品 3. 清理注册表 4. 重启电脑,删除目录(Oracle文件夹和app文件夹) ...

  6. 14 ,CSS 文字与文本

    1.CSS 中长度与颜色 2.CSS 中的文字属性 3.CSS 中的文本属性 14.1 CSS 中长度与颜色 长度单位 说明 in 英寸 cm 公分 mm 公里 cm 以目前字体高度为单位 ex 以小 ...

  7. 微信小程序 人脸识别登陆模块

    微信小程序---人脸识别登陆的实现 关键词:微信小程序 人脸识别 百度云接口 前言 这是一篇关于一个原创微信小程序开发过程的原创文章.涉及到的核心技术是微信小程序开发方法和百度云人脸识别接口.小程序的 ...

  8. 使用whistle模拟cgi接口异常:错误码、502、慢网速、超时

    绝大多数程序只考虑了接口正常工作的场景,而用户在使用我们的产品时遇到的各类异常,全都丢在看似 ok 的 try catch 中.如果没有做好异常的兼容和兜底处理,会极大的影响用户体验,严重的还会带来安 ...

  9. Python中星号的本质和使用方式

    翻译:Python 开发者 - 一汀, 英文:Trey Hunner http://blog.jobbole.com/114655/ Python开发者 在 Python 中有很多地方可以看到*和** ...

  10. 借助Chrome和插件爬取数据

    工具 Chrome浏览器 TamperMonkey ReRes Chrome浏览器 chrome浏览器是目前最受欢迎的浏览器,没有之一,它兼容大部分的w3c标准和ecma标准,对于前端工程师在开发过程 ...