资讯 小学 初中 高中 语言 会计职称 学历提升 法考 计算机考试 医护考试 建工考试 教育百科
栏目分类:
子分类:
返回
空麓网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
空麓网 > 计算机考试 > 软件开发 > 后端开发 > Java

Java-Thread知识点汇总

Java 更新时间: 发布时间: 计算机考试归档 最新发布

Java-Thread知识点汇总

什么是线程

      记得小时候的电脑老是很卡,打开一个浏览器、游戏啥的老是卡死,关又关不掉,然后就会打开任务管理器,强制关闭它

 我们可以看到,这个叫“进程”,简单理解一下,进程就是由(一个或多个)线程组成的,线程是操作系统进行运算调度的最小单位(进程是系统分配资源的基本单位)

进程和线程都是为了处理并发编程!线程是轻量级的进程
进程创建和销毁效率较低(需要分配资源),而线程弥补了该缺点!,
进程具有独立性,每个进程会有自己的虚拟空间,一个进程挂了不会影响另一个进程,
一个进程中的线程之间可能会互相影响,一个线程挂了甚至导致进程奔溃!!!

创建线程的n种方法


(首先我们的main函数就是一个线程)

线程的创建都是围绕着Thread实例的创建展开的

创建一个重写了run方法的的Thread子类

class MyThread extends Thread{	@Override	public void run() {		System.out.println("我是线程");	}}public class Main {		 public static void main(String[] args){              MyThread thread = new MyThread();              thread.start();	    }}

1.这个run方法里面就是线程要做的业务‘

2.调用这个start才开始创建线程,只是实例化是不会创建的

创建一个实现Runnable接口的类

class MyThread implements Runnable{	@Override	public void run() {		System.out.println("我是线程");	}}public class Main {		 public static void main(String[] args){              Thread thread = new Thread(new MyThread());              thread.start();	    }}

看这个和上一个方法的区别,上个方法直接实例化了MyThread而这个方法是实例化Thread然后把MyThread作为参数

匿名内部类

public class Main {		 public static void main(String[] args){              Thread thread = new Thread() {            	  @Override            		public void run() {            			System.out.println("我是线程");            		}              };              thread.start();	    }}

内部类的方式实现方法一

实现Runnable的匿名内部类作为参数

public class Main {		 public static void main(String[] args){              Thread thread = new Thread(new Runnable() {								@Override				public void run() {					System.out.println("我是线程");				}			});              thread.start();	    }}

用内部类的形式完成了方法二

Lamada

public class Main {		 public static void main(String[] args){              Thread thread = new Thread(()->{            	  System.out.println("太方便拉!");              });              thread.start();	    }}

推荐使用实现Runnable的接口方法,实现了代码之间的解耦合,你看如果用方法一的话,只能用实例化MyThread的方式创建线程,也就是说必须要把所有线程的业务代码都塞在这一个类中,而重写Runnable在创建线程的时候可以用多种实现Runnable的接口的类作为参数,不一定要把代码塞在一个类里面

Thread的三种构造方法

无参数的

Thread()   就像方法二(匿名内部类实现)

以Runnable实例为参数

Thread(new Runnable())

字符串参数

Thread(String name)  用来重命名线程

Thread的重要方法 

start()

创建线程 如果没有start线程就不会创建

run()

描述线程的业务

interrupt()

中断线程

join()

等待线程

加入在t2中调用t1.join()  就是说在t1完成后 才继续执行t2 

getstate()

获取线程状态

new:

此时java只把线程业务写好,创建了线程对象,但没有执行start方法,也就是还没有创建对应的线程!

runnable:

对应已经调用了start方法的状态(分为正在工作 可工作 即将工作)

terminate:

对应着线程以及结束,但是这个线程实例还在,(要不也调用不了方法不是)

blocked

正在等待锁,后面synchronized细说

waiting(无线等待)

一个正在无限期等待另一个线程执行一个唤醒动作的线程(wait造成的)

time-waiting(定时等待)

一个正在限时等待另一个线程执行一个唤醒动作的线程(sleep或者获得锁对象后wait)

Thread.sleep()/sleep() 

Thread.sleep()静态方法,当前线程进入休眠状态,里面可以输入参数(单位ms)

sleep() 比如t1.sleep()  线程t1休眠 里面可以输入参数(单位ms)

Thread.interrupted()

静态方法,测试线程是否中断

Thread.currentThread()

静态方法,返回当前线程实例

关于线程中断 

线程中断 就是结束当前线程,手动中断线程有两种方法

1.手动设置标志位

public class Main {		 public static void main(String[] args){		      boolean isQuit = false;              Thread thread = new Thread(()->{            	 if(!isQuit) {            		 System.out.println("yes!!!");            	 }              });              thread.start();	    }}

2.用interrupt()的方式

用interrupt要注意 如果是sleep状态的线程调用interrupt会报异常

转载请注明:文章转载自 http://www.konglu.com/
本文地址:http://www.konglu.com/it/1094795.html
免责声明:

我们致力于保护作者版权,注重分享,被刊用文章【Java-Thread知识点汇总】因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理,本文部分文字与图片资源来自于网络,转载此文是出于传递更多信息之目的,若有来源标注错误或侵犯了您的合法权益,请立即通知我们,情况属实,我们会第一时间予以删除,并同时向您表示歉意,谢谢!

我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2023 成都空麓科技有限公司

ICP备案号:蜀ICP备2023000828号-2