Java教程

2022,01,28Java多线程

本文主要是介绍2022,01,28Java多线程,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

 

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接口

线程池(响应速度提高了,提高了资源的重用率,便于管理)

这篇关于2022,01,28Java多线程的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!