码迷,mamicode.com
首页 > 编程语言 > 详细

几种特殊的多线程函数

时间:2015-07-17 18:53:39      阅读:119      评论:0      收藏:0      [点我收藏+]

标签:

静态

 

如果同步函数被静态修饰后,使用的锁是什么呢?

通过验证,发现不是this
因为静态方法中不可以定义this

静态进内存时,内存中没有本类对象,但是一定有给类对应的字节码文件对象。
类名:class  该对象的类型时Class

class Ticket implements Runnable
{
	private int tick=100;
	public void run()
	{
		synchronized(Ticket.class)
		{
			while(true)
			{
				if(tick>0)
				{
				System.out.println("tick..."+tick--);
				}
			}
		}
		
	}
}
class StaticDemo
{
	public static void main(String[] args)
	{
		Ticket c=new Ticket();
		Thread  t1=new Thread(c);
		Thread  t2=new Thread(c);
		t1.start();
		t2.start();
	}
}

 

技术分享

 

 

 

 

单例设计模式

 

饿汉式

class Single
{
	private static  Single s= null;
	private Single(){}
	public static Single getInstance()
	{
		if(s==null)
			s=new Single();
		return s;
	}
}


这个不会出现安全问题;

 

 

懒汉式

class Single
{
	private static  Single s= null;
	private Single(){}
	public static Single getInstance()
	{
		if(s==null)
			s=new Single();
		return s;
	}
}

当有多线程时,在调用的方法中出现多条语句 ,就有可能出现安全问题

解决

class Single
{
	private static  Single s= null;
	private Single(){}
	public static Single getInstance()
	{
		if(s==null)
		{
			synchronized(Single.class)
			{
				if(s==null)
					s=new Single();
				return s;
			}
		}
	}
}


 


 

面试时注意

懒汉式与饿汉式有什么不同?
懒汉式特点在于延迟加载;

 

懒汉式在延迟加载时有没有问题?怎么解决?
有,在多线程访问时会出现安全问题;
可以加同步解决,用同步函数与同步代码块都可以,但是效率低效;所以我们用双重判断来解决效率问题;

 

加同步是用的锁是给类所属的字节码文件对象;

 

一般面试都会问
请写一个延迟加载的单例设计模式示例;
这时一定要写加同步的代码;

 


 

 

版权声明:本文为博主原创文章,未经博主允许不得转载。

几种特殊的多线程函数

标签:

原文地址:http://blog.csdn.net/l55iuming/article/details/46929809

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!