黑马程序员技术交流社区
标题:
多线程中同步有几种实现方式
[打印本页]
作者:
花之都双鱼
时间:
2014-9-26 22:36
标题:
多线程中同步有几种实现方式
多线程中同步有哪几种实现方式啊?能否举个例子
作者:
雨下阳光
时间:
2014-9-27 12:31
有两种,一种是同步代码块, 用法:
synchronized(对象)
{需要被同步的代码}
/*
给卖票程序示例加上同步代码块。
*/
class Ticket implements Runnable
{
private int tick=100;
Object obj = new Object();
public void run()
{
while(true)
{
//给程序加同步,即锁
synchronized(obj)
{
if(tick>0)
{
try
{
//使用线程中的sleep方法,模拟线程出现的安全问题
//因为sleep方法有异常声明,所以这里要对其进行处理
Thread.sleep(10);
}
catch (Exception e)
{
}
//显示线程名及余票数
System.out.println(Thread.currentThread().getName()+"..tick="+tick--);
}
}
}
}
}
复制代码
另一种是同步函数,
格式:
在函数上加上synchronized修饰符即可。
class Ticket implements Runnable
{
private int tick=100;
Object obj = new Object();
public void run()
{
while(true)
{
show();
}
}
//直接在函数上用synchronized修饰即可实现同步
public synchronized void show()
{
if(tick>0)
{
try
{
//使用线程中的sleep方法,模拟线程出现的安全问题
//因为sleep方法有异常声明,所以这里要对其进行处理
Thread.sleep(10);
}
catch (Exception e)
{
}
//显示线程名及余票数
System.out.println(Thread.currentThread().getName()+"..tick="+tick--);
}
}
}
复制代码
作者:
小城。
时间:
2014-9-27 12:49
学习了。
作者:
在学野马
时间:
2014-9-27 15:07
学习了。
作者:
花之都双鱼
时间:
2014-9-27 15:24
雨下阳光 发表于 2014-9-27 12:31
有两种,一种是同步代码块, 用法:
synchronized(对象)
{需要被同 ...
好详细,谢谢回答
作者:
rel4x
时间:
2014-9-27 21:17
学习了。。。。。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2