黑马程序员-多线程2

来源:互联网 发布:python import 和from 编辑:程序博客网 时间:2024/06/03 18:58

------<a href="http://www.itheima.com" target="blank">Java培训、Android培训、iOS培训、.Net培训</a>、期待与您交流! -------

又要开始抢火车票了。突然想到刚刚学习的多线程。


需求:
火车票售票的例子是解释多线程的好例子。主要用来解释多线程的线程安全问题。知道的朋友都知道,这里需要实现Runnable接口,怎么才能避免线程安全隐含呢?

解决方案:同步
何时同步呢?如何正确使用同步?
1. 大于等于两个线程
2. 所有线程使用同一个锁。
同步的意思就是为当前线程加锁(锁旗标),这个锁根据不同的同步方式又分别有不同的要求。具体在每一个同步方式中展开讲述。
同步有两种方式:
1.同步代码
格式:
synchronized(对象) {
    ...//代码块
}
同步代码块的锁为任意类的实例。比如Object的对象,或this指向的对象,或某类的字节码对象(就是编译后的.class文件)等等。
2.同步方法(同步方法又分为非静态方法和静态方法,这又有所不同)
非静态同步方法格式1:
作用域(如public) synchronized 函数名() {
    

非静态同步方式的锁是this。

静态同步方法
作用域(如public) synchronized 函数名() {
    

静态同步方法使用的锁是该类的字节码对象。格式:类名.class。

锁就像火车里的厕所一样,当线程执行同步代码或同步函数的时候,就会锁住该区域,其他线程无法获得该部分的操作权。就像厕所指示灯显示“有人”,只有该锁被释放以后,其他线程才有机会操作该同步的部分。
0 0
原创粉丝点击