1、进程:正在执行中的程序,其实是应用程序在内存中运行的那片空间。
2、线程:进程中的一个执行单元,负责进程中的程序的运行,一个进程中至少要有一个线程。一个进程中可以有多个线程的,这个应用程序也可以称之为多线程程序。
3、程序启动多线程,有什么应用呢?可以实现多个程序同时执行,专业术语称为并发。多线程的使用可以合理使用cpu的资源,如果线程过多导致降低性能。
4、创建线程的方式两种方式:
4.1、继承Thread
4.1.1、定义一个类继承Thread
4.1.2、重写run方法
4.1.3、创建子类对象
4.1.4、启动start方法
4.2、实现Runnable
4.2.1、定义类实现runnable接口
4.2.2、覆盖接口中run方法,将线程任务代码定义到run方法里。
4.2.3、创建Thread类的对象。
4.2.4、将runnable接口的子类对象作为参数传入Thread类的构造方法里。
4.2.5、启用Thread类的start方法。
5、线程对象调用run方法和调用start方法区别?调用run方法不开启线程,近视对象调用方法。调用start方法开启线程,并让JVM调用run方法在开启的线程中执行。
6、创建线程的目的是什么?是为了建立单独的执行路径,让多部分代码实现同时执行。也就是线程创建并执行需要给定的代码(线程任务)。
7、多线程执行时,在栈内存中,其实每一个执行线程都有一片自己所属的栈内存空间。进行方法的压栈和弹栈。当执行线程的任务结束了,线程自动在栈内存中释放了。但是当所有的执行线程都结束了,那么进程就结束了。
8、Thread与Runnable的区别Runnable接口避免了单继承的局限性。实现Runnable接口的方式,更加符合面向对象,线程分为两部分,一部分线程对象,一部分线程任务。继承Thread类:线程对象和线程任务耦合在一起。一旦创建Thread类的子类对象,既是线程对象,又有线程任务。将线程任务单独分离出来封装成对象,类型就是runnable接口类型。实现Runnable接口对线程对象和线程任务进行解耦。
9、线程的运行状态被创建:运行:该状态是线程具备了CPU执行资格的同时也具备了执行权,一个时刻只能有一个线程在执行。消亡:当run方法结束,线程就进入了消亡状态。冻结:释放了CPU的执行权和执行资格,有两种方式:sieep(休眠)、wait(等待),同时也有两种方式解除此状态,sleep(时间到)、notify()要注意的时,当线程从冻结状态结束后,并没有立马运行,只能说它获取了CPU的执行资格,因为随机性的原因,它也可能转换成临时阻塞状态。临时阻塞状态:线程具备CPU的执行资格,不具备执行权,正等着CPU切换到它运行。file:///C:/Users/ds/AppData/Local/Temp/msohtmlclip1/01/clip_image002.jpg
10、多线程的安全性问题的原因
10.1多个线程在操作共享的数据。
10.2线程任务操作共享数据的代码有多条(运算有多个)。解决问题:用同步代码块synchronized同步的好处:解决多线程的安全问题。同步的弊端:降低了程序的性能。同步的前提:必须保证多个线程在同步中使用的是同一个锁。同步的另一种体现形式:同步函数。同步函数使用的锁是this。
11、多线程安全问题-同步函数使用的锁和同步代码块的区别同步函数使用的锁是固定的this。同步代码块使用的锁可以是任意对象。
12、静态同步函数使用的锁不是this,而是字节码文件对象类名.class。
13、单例设计模式13.1恶汉式:
代码体现:
Class Single{
Privtae static final Single s=new Single();
Private Single(){}
Public static Single getInstance(){
Return s;}
}
13.2、懒汉式:延迟加载,存在着多线程并发访问的安全问题,需要使用同步来解决安全问题,但是同步会降低效率,所以使用双重if()判断形式解决效率低的问题。
实现代码:Class
Single{
Private Single(){}
Private static Single s=null;
Public static Single getInstance(){
If(s==null){
Synchroinzed(Single.class){
If(s==null)S=new
Single();
}Return
s;}
}
}
14、死锁:即同步的弊端,不是线程和进程没有了,而是不动了。表现形式:同步嵌套的时候,使用的锁不一样,容易引发死锁。
实现代码:
//Thread-0
Synchroinzed(obj1){Synchroinzed(obj2){}}
//Thread-1
Synchroinzed(obj2){Synchroinzed(obj1){}}
版权声明:本文为博主原创文章,未经博主允许不得转载。
分享到:
相关推荐
关于线程练习,可以掌握线程的相关操作。。。
关于线程的动态停止 启动一个或n个线程 动态的卖票。经过一段时间后停止 停止的时间由自己或程序动态给出
请大家帮忙解决一下,是关于线程同步的问题,我想了很久,问题是运行时出现白屏
操作系统PPT(关于线程进程的)操作系统PPT(关于线程进程的)操作系统PPT(关于线程进程的)操作系统PPT(关于线程进程的)操作系统PPT(关于线程进程的)操作系统PPT(关于线程进程的)操作系统PPT(关于线程进程...
LINUX C 关于线程的详细介绍里面对其中的例子有详细的介绍和分析
linux关于线程的学习资料,有线程,进程,信号,信号量。及一些使用的例子和分析
线程入门,创建线程、线程的几种状态、线程排序、线程池入门。
java高清关于线程的讲解实例.rar
关于线程的简单应用,初学者比较易懂。。。。是一个很好的例子
c#关于线程的一个应用(进度条) 多线程
关于线程安全与可重入性.pdf
Java特别篇--关于线程创建的三种方式的总结对比
自己写的java线程的应用编程,按照java大学教程(第三版)的题目写的
线程同步线程同步线程同步线程同步线程同步线程同步
线程与进程详细解说 图解 最实用 最全面
用来写多线程读写的文档的模拟,主要是为了模拟视频的直播做准备
如何使用线程,线程池,ThreadHandler等等
线程 管理 delphi thread 线程 管理 delphi thread
自己写的线程的小程序,关于生产,搬运,同步,线程等待,线程唤醒,对初学者有很好的帮助