A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

今天是2014.12.18,又要开始抢火车票了。突然想到刚刚学习的毕向东老师的多线程。那在这人说一说,和学习的盆友们一起交流。

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

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

静态同步方法
作用域(如public) synchronized 函数名() {
   
}
静态同步方法使用的锁是该类的字节码对象。格式:类名.class。

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

6 个回复

倒序浏览
楼主抢到票了没啊?
回复 使用道具 举报
鹏少 来自手机 中级黑马 2014-12-18 16:00:49
藤椅
嘿嘿,多线程要同步呀,不然会出错的
回复 使用道具 举报
搞个无敌抢票软件试试
回复 使用道具 举报
面向对象刚看完也该看多线程了
回复 使用道具 举报
呵呵,看一下……
回复 使用道具 举报
czyhandsome 发表于 2014-12-18 11:48
楼主抢到票了没啊?

装了百度抢票,结果没用到,今年的票还是挺多的。
哈哈,加油呀!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马