java线程的基础知识(基础篇)

一些线程的基本知识,希望对刚了解线程的人有些帮助,不足之处望指出。

基础篇:
一:什么是线程?
线程,有时被称为轻量级进程(Lightweight Process,LWP), 是程序执行流的最小单元 。线程是程序中一个单一的顺序控制流程。 进程内一个相对独立的、可调度的执行单元 ,是系统独立调度和分派CPU的基本单位指运行中的程序的调度单位。

二: 如何实现?
继承Thread类,实现Runnable接口,重写run方法。
run方法,和start方法的区别?
线程调用run方法,是执行run方法中代码块,start方法才是开启线程。
sleep(),wait()方法有什么区别?
sleep方法和wait方法都是中断线程,使线程处于阻塞状态。不同之处:sleep底层调用的还是wait方法,如果线程中有对象,但是sleep方法并不放弃对象的监听,而wait则放弃对象的监听。
notify(),notifyall()方法:
唤醒线程,notify方法唤醒指定的线程,notifyall唤醒所有线程。
wait()方法表示,放弃当前对资源的占有权,等啊等啊,一直等到有人通知我,我才会运行后面的代码。 
notify()方法表示,当前的线程已经放弃对资源的占有, 
通知等待的线程来获得对资源的占有权,但是只有一个线程能够从wait状态中恢复, 
然后继续运行wait()后面的语句; 
notifyAll()方法表示,当前的线程已经放弃对资源的占有, 通知所有的等待线程从wait()方法后的语句开始运行。 
三:线程安全
上锁, JVM的内存模型,堆中域的数据共有。
关键字Synchronized;(取的是对象锁,而不是一段代码或方法。因为对象不同,锁也不同)
synchronized是要用对象锁的,方法 不加static修饰用的是调用这个方法的对象来作为对象锁 ,加上static修饰用的则是 对象的字节码来作为对象锁 (Class)。或者这种解释:加static的属性无论实例化多少次, 始终用的是一个地址空间 ,如果对这个static修饰的属性加锁,就相当于 多个对象也是一把锁了,因为即使是多个线程也是同步访问一块地址空间。
四:一个对象一把锁,多个线程多个锁。

五: 对象锁的同步和异步:
同步:synchronized
同步的概念就是 共享 ,我们要知道“共享”这两个字,如果不是共享的资源,就没有必要进行同步,也就是没有必要进行加锁;同步的目的就是为了线程的安全,其实对于线程的安全,需要满足两个最基本的特性: 原子性和可见性 ;
异步:asynchronized
异步的概念就是独立,相互之间不受到任何制约,两者之间没有任何关系。

发布了26 篇原创文章 · 获赞 0 · 访问量 9935

猜你喜欢

转载自blog.csdn.net/weixin_38246518/article/details/78736366