标签:Singleton 01 class SingleTest 线程 28Java static 多线程 public
2022.01.29多线程每日一考
1.画图说明线程的生命周期,以及各状态切换使用到的方法等
2.同步代码块中涉及到同步监视器和共享数据,谈谈你对同步监视器和共享数据的理解,以及注意点。
同步监视器:用于解决线程安全问题,在多个线程对共享数据进行操作时,保证一个线程操作完后下一个线程才进入。
共享数据:静态变量
注意点synchronize需将共享数据代码刚好完全包裹住
多个线程必须保证使用同一个同步监视器,一般是所在类.Class
synchronized(同步监视器){
//操作共享数据的代码 (不能包括多了,也不能包括少了)
}
3. sleep()和wait()的区别
sleep()用于单个线程的阻塞
不释放同步锁
位于Thread类中
wait()用于多个线程的通信
放弃同步锁(等待notify调用)
位于Object类中
4. 写一个线程安全的懒汉式
自己写的:
package www.fancy.security; public class SingleTest { private SingleTest(){ } private static SingleTest sin = null; public static SingleTest CreatSingle(){ synchronized (SingleTest.class) { if( sin == null){ sin = new SingleTest(); } return sin; } } } class Test{ public static void main(String[] args) { SingleTest s1 = SingleTest.CreatSingle(); SingleTest s2 = SingleTest.CreatSingle(); System.out.println(s1 == s2); } }
答案:
class Singleton { private static Singleton instance = null; private Singleton(){} public static Singleton getInstance(){ if(instance==null){ synchronized(Singleton.class){ if(instance == null){ instance=new Singleton(); } } } return instance; } } public class SingletonTest{ public static void main(String[] args){ Singleton s1=Singleton.getInstance(); Singleton s2=Singleton.getInstance(); System.out.println(s1==s2); } }
5. 创建多线程有哪几种方式:4种
继承Thread类
实现Runnable接口
实现Callable接口
线程池(响应速度提高了,提高了资源的重用率,便于管理)
标签:Singleton,01,class,SingleTest,线程,28Java,static,多线程,public 来源: https://www.cnblogs.com/fancy2022/p/15854589.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。