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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 木木赤赤 于 2013-11-26 07:38 编辑

线程类声明start()方法为什么要用synchronized?
public synchronized void start()

评分

参与人数 1技术分 +1 收起 理由
黄炳期 + 1 今天连续发了好多帖子啊

查看全部评分

4 个回复

倒序浏览
王柠 黑马帝 2013-11-20 11:25:11
沙发
防止发生并发错误。synchronized是保证线程安全 就是在当多个线程操作同一资源时保证某一时刻只能有一个线程在执行这个任务你这个虽然开了多个线程 但是并没有操作同一资源举例吧:买火车票 2个窗口卖 假定有张票的ID为80 如果没有synchronized这个锁来控制 那有可能导致2个窗口同时都把ID为80的这张票卖出去 这不乱套了嘛 那不就有2张ID为80的票了?有了synchronized就只有当一个窗口卖完了 释放了synchronized这个锁 其他窗口才能来卖票 这时ID为80的票已经被卖出去了 也就只能卖其他的了

http://www.cnblogs.com/GnagWang/archive/2011/02/27/1966606.html
回复 使用道具 举报
为了解决线程安全问题的。。。CPU执行权的分配问题。。。
回复 使用道具 举报
线程类声明start()方法为什么要用synchronized
synchronized就是对方法加锁,保证方法在被一个线程使用的时候不被其他线程占用,
start()方法指的是让一个线程开始执行,加上synchronized后,start方法被锁定,保证只有一个线程运行,可以有效的防止并发问题。
回复 使用道具 举报
一、当两个并发线程访问同一个对象object中的这个synchronized(this)同步代码块时,一个时间内只能有一个线程得到执行。另一个线程必须等待当前线程执行完这个代码块以后才能执行该代码块。
二、然而,另一个线程仍然可以访问该object中的非synchronized(this)同步代码块。
三、尤其关键的是,当一个线程访问object的一个synchronized(this)同步代码块时,其他线程对object中所有其它synchronized(this)同步代码块的访问将被阻塞。
四、第三个例子同样适用其它同步代码块,它就获得了这个object的对象锁。结果,其它线程对该object对象所有同步代码部分的访问都被暂时阻塞。
这是对synchronized同步锁的一些理解,简单点说就是为了保证线程安全性的,也就是线程同步,当然他也是有弊端的,就是降低了执行效率,因为每次都要判断锁的问题.
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马