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

原创 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区域,也就是此时它能对区域内的资源进行操作了)
线程同步的原理图

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

java中线程相关知识点大总结

一、Java线程:概念与原理 1、操作系统中线程和进程的概念 现在的操作系统是多任务操作系统。多线程是实现多任务的一种方式。进程是指一个内存中运行的应用程序,每个进程都有自己独立的一块内存...
  • xuweilinjijis
  • xuweilinjijis
  • 2013年05月03日 09:50
  • 5576

J2EE基础知识点总结

J2SE基础   1.     九种基本数据类型的大小,以及他们的封装类。 基本类型 大小(字节)      默认值    封装类 byte         1           (byte...
  • sunsfan
  • sunsfan
  • 2016年09月28日 14:58
  • 4528

MYSQL的相关知识总结

MySQL复习 一.相关概念(最重要的) 1.什么是数据库?(什么叫数据data,数据库database,数据库管理系统DBMS(MySQL、DB2、SQL SERVER、Oracle、access、...
  • W1365966490
  • W1365966490
  • 2012年11月12日 19:01
  • 409

冒泡排序 知识点小结

冒泡排序,是指计算机的一种排序方法,它的时间复杂度为O(n^2),虽然不及堆排序、快速排序的O(nlogn,底数为2),但是有两个优点:1.“编程复杂度”很低,很容易写出代码;2.具有稳定性,这里的稳...
  • wu_lai_314
  • wu_lai_314
  • 2012年12月29日 20:32
  • 790

MySQL数据库以及相关知识点总结大全

一、MySQL(My Structured Query Language,我的结构化查询语言) 3.数据库类型: a.关系型数据库 b.网状型数据库 c.面向对象型数据库 4.关系型...
  • Liu_KH
  • Liu_KH
  • 2017年11月21日 20:34
  • 177

Java多线程和并发性知识点总结

一、 什么是进程、线程?线程和进程的区别? 1. 进程 当一个程序进入内存运行时,即变成一个进程。进程是处于运行过程中的程序。 进程是操作系统进行资源分配和调度的一个独立单位。 进程的三个特征:...
  • u010169720
  • u010169720
  • 2015年12月24日 15:55
  • 544

spring基础知识整理

spring学习的总结1、什么是Spring的Ioc容器spring容器就是常说的Ioc容器,即控制翻转,作为程序员,当我们去实例化一个 对象时,通常需要手动new创建一个对象,并且去跟踪该对象的生命...
  • DFL_always
  • DFL_always
  • 2016年12月06日 19:21
  • 1136

HTTP相关知识点总结

名词解释 HTTP:超文本传输协议(HTTP,HyperText Transfer Protocol)是互联网上应用最为广泛的一种网络协议。所有的WWW文件都必须遵守这个标准(默认端口为80)。 HT...
  • B14070315
  • B14070315
  • 2017年03月04日 14:10
  • 401

【多线程】java多线程知识点总结

写在前面: 这篇文章是我最近看15个顶级Java多线程面试题及回答这篇帖子,根据文中所列问题在网上找的答案汇总。或许某些解答不尽如人意,欢迎大家来补充和指正。另外感谢这篇帖子的翻译者赵峰以及所有在网...
  • moshenglv
  • moshenglv
  • 2016年07月18日 17:20
  • 1277

Spring知识点总结

在学习Spring之前,先了解Spring是什么。百度百科上解释:Spring是分层的JavaSE/EE full-stack轻量级开源框架,以IoC(Inverse of Control 反转控制)...
  • zjx86320
  • zjx86320
  • 2015年06月29日 20:06
  • 3674
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:多线程相关知识点总结--黄彬
举报原因:
原因补充:

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