有两种,一种是同步代码块, 用法:
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--);
- }
- }
- }
复制代码 |