黑马程序员技术交流社区
标题:
多线程中同步操作和同时操作有什么不同之处?
[打印本页]
作者:
黑马任雪刚
时间:
2012-5-3 00:10
标题:
多线程中同步操作和同时操作有什么不同之处?
多线程中同步操作和同时操作有什么不同之处?具体举个例子呗
作者:
何阳
时间:
2012-5-3 00:22
//多线程中同步操作和同时操作有什么不同之处?具体举个例子呗
//比如现在有10个一块的钱,让甲和乙自己处理
//同步操作 甲拿一块,然后乙拿一块,甲拿一次,已拿一次
//同时操作,那看谁厉害了,可能甲得4块,已得6块,很有可能他们还会打架
//在计算机中,cpu每次只能执行一个线程,做这快速切换的东西,我们不能觉察而已
//
同步在java中用synchronized()来体现,括号中的是对象,相当于一把锁,每次
//只有一个人能够进去,
作者:
贾联国
时间:
2012-5-3 00:48
同步操作就是只允许一个线程运行,只有这个线程放弃运行权,其他的线程才能执行。
同时操作就是所有线程一起抢夺cpu的运行权,没有执行顺序和执行时间
作者:
崔仁军
时间:
2012-5-3 09:00
1 同步是指两个线程都要去访问这个对象 但是是有顺序的 一个线程先去执行就会对这个对象加锁 等执行完毕后对这个对象解锁之后下一个线程才能去访问这个对象;
2 同时也是指两个线程都去访问这个对象 但他们是没有顺序的 ,两个线程可以同时去访问他们。
3 比如去银行取款 如果账户只有1000 ,我们要取款800 一个在柜台取 一个在提款机取 如果是同步的话我们就只能一个取完了 另一个才去取 等另一个取的时候就会发现账户余额不足无法取款 如果是同时的话那么就可以同时去取 等第一个正在去的时候另外一个也在去 那么两个人都可以同时取800元 那账户就成了负600了 那银行不就亏惨了 写了如下代码
public class FetchMoney
{
public static void main(String[] args)
{
Bank bank = new Bank();
Thread t1 = new MoneyThread(bank); // 柜台
Thread t2 = new MoneyThread(bank); // 取款机
t1.start();
t2.start();
}
}
// 银行账户类
class Bank
{
private int money = 1000;
public synchronized int getMoney(int number)
{
if(number < 0)
{
return -1;
}
else if(number > money)
{
return -2;
}
else if(money < 0)
{
return -3;
}
else
{
try
{
Thread.sleep(1000);
}
catch (InterruptedException e)
{
e.printStackTrace();
}
money -= number;
System.out.println("left money: " + money);
return number;
}
}
}
class MoneyThread extends Thread
{
private Bank bank;
public MoneyThread(Bank bank)
{
this.bank = bank;
}
@Override
public void run()
{
System.out.println(bank.getMoney(800));
}
}
作者:
马超
时间:
2012-5-3 09:08
本帖最后由 依然小马哥 于 2012-5-3 23:16 编辑
同步操作 和 同时操作
同步操作的前提:其中的一个线程自动放弃了运行资格,这时候其他线程有序执行
同时操作,呵呵,将相当于是生活在罪恶都市中的人,横行霸道,你夺我抢,在线程中的表现形式就是他们争相抢夺CPU的运行资格。
可以这么说 ,“同时”所包括的范围要比“同步”大,画个图:
同步是加以约束的,而实现这个约束的就是同步代码块 和 同步函数 关键字:synchronized
1.JPG
(18.81 KB, 下载次数: 60)
下载附件
2012-5-3 09:12 上传
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2