多线程相关知识点总结--黄彬

来源:互联网 发布:淘宝好奇的鼻子香水屋 编辑:程序博客网 时间:2024/04/30 16:32

在考研的时候,计算机基础也有说到线程和进程,那时候我总是搞不明白啥意思,那我就死记硬背下来,幸亏考试也没考到这个东西,要不然我就死翘翘咯。现在我已经比较明白线程与进程的关系了,下面是我对多线程学习的一些知识点总结,欢迎高手们批评指正哦!
一、线程的概念
1、多线程——指一个程序能并发完成不同的功能。
多线程机制是Java语言重要特性之一,它使得一个Java程序能够同时完成不同的工作任务,而且保证这些任务在实现过程中互不干扰,独立运行,这样就可以提高Java程序的执行效率,缩短程序执行时间。
进程——在计算机操作系统中每一个运行的程序。(即计算机上的软件)
线程——每个进程中包含了多个独立指令序列,每个指令序列可以实现一项功能,那么这些指令序列就是线程。(即软件的任何一种功能)
二、线程的生命周期。
包括新生、就绪、运行、等待、休眠、死亡、阻塞这7种状态。各种关系和定义如下图:
线程生命周期

三、线程的实现方法:
方式1:继承Thread类的方式
格式:

 public class 自定义的线程类名称 extends Thread{  public void run(){//重写run()方法,这个是固定的写法........;   //run()方法体具体内容。}public static void main(String[] args){ 自定义线程类名称 对象名=new 自定义的线程类名称();//创建线程 对象名.start();    //启动线程} }

注意:继承Thread类需要重写run()方法,其实run()方法是线程真正功能的体现,即给所创建的线程赋予相应的功能,线程创建好了以后要调用start()方法来启动线程,因为start()方法会自动调用run()方法。
方式二:实现Runnable接口的方式

public class 线程类名称 implements Runnable{ //①实现Runnable接口
@Override
public void run(){//重写run()方法
…….; //run()方法体内容
}
public static void main(String[] args){
Runnable r的对象名=new 线程类名称(); //②创建Runnable对象
Thread 线程对象名=new Thread(r的对象名); //③利用runnable对象创建线程对象
线程对象名.start(); //④启动线程
}
}

四、线程的操作方法:
1、线程名称的设置与获取
名称的设置:public final void setName(String name);
名称的获取:public final void getName();
也就是说,设置:线程对象名.setName(“线程名称”);
获取:线程对象名.getName();
还可以在创建线程的时候设置线程名,在implements Runnable接口的那种创建线程的方式中,Thread 线程对象名=new Thread(r对象名,”线程名字”);

2、线程休眠
通过sleep(time); 是指线程在运行过程中能够被暂停执行。格式:
public static void sleep(long millis); 以毫秒为单位,1000millis=1second
该方法要放在try/catch语句中,报错InterruptedException异常

try{
Thread.sleep(1000);
}
catch(InterruptedException e)
{e.printStackTrace();}

3、线程加入
通过调用join()方法,该方法要放在try/catch语句中。线程加入就是某一线程B可以加入到正在运行的线程A中,使得线程A暂停运行,同时线程B开始运行,直到加入的线程B运行结束,线程A才会继续运行。
即 try{
线程对象名.join();
}
catch(InterruptedException e){
e.printStackTrace();
}

4、线程中断
线程对象通过调用interrupt()方法,该方法可以中断线程,但不能完全终止线程的运行。

public void run(){
…….
try{
Thread.sleep(1000);
…….
}
catch(InterruptedException e){
system.out.println(“线程被中断!”);
}
}
。。。。。。
public static void mian(String[] args){
线程对象名.interrupt();
}

5、判断线程是否启动
在java中提供了isAlive()方法来判断某一线程是否启动。
格式: public final boolean isAlive()
即,public static void main(String[] args){
if(线程对象名.isAlive()){

}
else{
}
}

五、线程管理:
1、线程优先级(优先级高并非总是优先执行)
Java程序中可以所有线程设置线程优先级,其目的是使优先级高的线程优先开始运行,注意,虽然某一个线程设置了较高的优先级,但不是说该线程一定会优先运行,只是说该线程从就绪状态进入运行状态的机会比较大。
线程对象名.setPriority(int num); 数字越大,表示优先级越高,但是数字仅可以在1–10之间。
即:
Thread 线程对象名=new Thread(); //创建线程对象
线程对象名.setPriority(4); //设置优先级别为4,中等偏下一点
线程对象名.start(); //启动线程

2、线程同步:
Java中使用synchronized关键字来实现线程的同步。它会对其所有的区域加锁,而当把对共享资源的操作放在synchronized区域内时,每个线程需要在对这些资源进行操作前获得这个锁,获得锁的线程可以对区域内的资源进行操作,其他线程需要等待该线程执行完毕并且把锁释放后才能获取锁并操作资源。(即,获得了锁就可以进入synchronized区域,也就是此时它能对区域内的资源进行操作了)
线程同步的原理图

0 0
原创粉丝点击