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

原创 2016年05月31日 12:18:10

在考研的时候,计算机基础也有说到线程和进程,那时候我总是搞不明白啥意思,那我就死记硬背下来,幸亏考试也没考到这个东西,要不然我就死翘翘咯。现在我已经比较明白线程与进程的关系了,下面是我对多线程学习的一些知识点总结,欢迎高手们批评指正哦!
一、线程的概念
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区域,也就是此时它能对区域内的资源进行操作了)
线程同步的原理图

版权声明:本文为博主原创文章,未经博主允许不得转载。

金币(积分)商城架构漫谈

金币(积分)商城(下称“商城”)是众多App内的一个产品,随着App使用的用户越来越多,商城对于用户留存的提升,扮演着重要的角色;做为提高用户黏性的核心产品,在拥有很好用户体验的同时,也必须存在着一个...

如何用消息系统避免分布式事务?

什么是分布式事务 传统的基于数据库本地事务的解决方案只能保障单个服务的一次处理具备原子性、隔离性、一致性与持久性,但无法保障多个分布服务间处理的一致性。因此,我们必须建立一套分布式服务处理之间的...

多线程相关知识点

一、多线程之间的通信 方法一 通过访问共享变量的方式(注:需要处理同步问题) 方法二 通过管道流 其中方法一有两种实现方法,即 方法一a)通过内部类实现线程的共享变量 代码如下:...

多线程相关知识点整理

内容:    1 线程的概念

多线程(九):线程相关知识点(创建方式,API,守护线程,状态转换)

介绍了线程的创建方式,守护线程,常用API,以及状态的转换

多线程知识点

  • 2015年09月16日 14:35
  • 175KB
  • 下载

JAVA多线程、并发知识点总结

1、java多线程(一个优秀的博客)http://www.cnblogs.com/skywang12345/p/java_threads_category.html2、线程状态图http://www....

多线程知识点简单总结

一、进程与多线程的概念及线程的优点 进程:操作系统的基本运行单元,是程序的一次执行。 线程:在进程中独立运行的子任务。 Eg:QQ是一个进程,则好友视频,下载文件,数据传输等都是线程。 ...

OC多线程知识点总结

零、线程的注意点(掌握) 1.不要同时开太多的线程(1~3条线程即可,不要超过5条) 2.线程概念 1> 主线程 : UI线程,显示、刷新UI界面,处理UI控件的事件 2> 子线程 : 后台线程,异步...
  • igddlq
  • igddlq
  • 2015年04月27日 10:18
  • 317

JAVA知识点总结(五)多线程

Java线程:概念与原理 一、操作系统中线程和进程的概念 现在的操作系统是多任务操作系统。多线程是实现多任务的一种方式。 进程是指一个内存中运行的应用程序,每个进程都有自己独...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:多线程相关知识点总结--黄彬
举报原因:
原因补充:

(最多只允许输入30个字)