黑马程序员技术交流社区

标题: 开始抢火车票了,想到了多线程的那些事儿 [打印本页]

作者: Joseph_liuxh    时间: 2014-12-18 10:59
标题: 开始抢火车票了,想到了多线程的那些事儿
今天是2014.12.18,又要开始抢火车票了。突然想到刚刚学习的毕向东老师的多线程。那在这人说一说,和学习的盆友们一起交流。

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

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

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

锁就像火车里的厕所一样,当线程执行同步代码或同步函数的时候,就会锁住该区域,其他线程无法获得该部分的操作权。就像厕所指示灯显示“有人”,只有该锁被释放以后,其他线程才有机会操作该同步的部分。
作者: czyhandsome    时间: 2014-12-18 11:48
楼主抢到票了没啊?
作者: 鹏少    时间: 2014-12-18 16:00
嘿嘿,多线程要同步呀,不然会出错的
作者: zhaojiajun    时间: 2014-12-18 17:52
搞个无敌抢票软件试试
作者: dream_style    时间: 2014-12-18 18:48
面向对象刚看完也该看多线程了
作者: zhuwenjian    时间: 2014-12-18 18:52
呵呵,看一下……
作者: Joseph_liuxh    时间: 2014-12-18 21:18
czyhandsome 发表于 2014-12-18 11:48
楼主抢到票了没啊?

装了百度抢票,结果没用到,今年的票还是挺多的。
哈哈,加油呀!




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2