首页 > 编程语言 > 详细

多线程

时间:2020-10-31 09:48:50      阅读:20      评论:0      收藏:0      [点我收藏+]

Thread

创建形式

1.继承Thread类并重写run()方法
2.实现Runnable接口并实现run()方法
3.实现callable接口
4.线程池

常用方法

1.start():启动当前线程
2.run():通常需要重写Thread类中的此方法,将创建的线程要执行的操作的声明在此方法中
3.currentThread():静态方法,返回执行当前代码的线程
4.getName():获取当前线程的名字
5.setName():设置当前线程的名字
6.yield():释放当前cpu的执行权
7.join():在线程a中调用线程b的join(),此时线程a就进入阻塞状态,直到线程b完全执行完以后,线程a才结束阻塞状态
8.stop():已过时。当执行此方法是,强制结束当前进程
9.sleep(long milltime):让当前线程"睡眠"指定的millitime毫秒。在指定的millitime毫秒时间内,当前线程是阻塞状态
10.isAlive():判断当前线程是否存活
11.getPriority():获取线程的优先级
12.setPriority():设置线程的优先级

线程优先级

MAX_PRIORITY:10 最大优先级
MIN_PRIORITY:1  最小优先级
NORM_PRIORITY:5 默认优先级

生命周期

技术分享图片

线程安全

一、同步代码块

synchronized(同步监视器){
	//需要被同步的代码
}
说明:
1.操作共享数据的代码
2.共享数据:多个线程共同操作的变量,比如ticket就是共享数据
3.同步监视器,俗称:锁。任何一个类的对象,都可以充当锁。要求:多个线程必须要共用同一把锁。

二、同步方法

含义:如果操作共享数据的代码完整声明在一个方法中,我们不妨将此方法声明为同步的
说明:
	1.同步方法仍然涉及到同步监视器,只是不需要我们显示的声明
	2.非静态的同步方法,同步监视器是:this,静态的同步方法,同步监视器是:当前类本身

三、Lock锁

死锁

含义:不同的线程分别占用对方需要的同步资源不放弃,都在等待对方放弃自己需要的同步资源,就形成了线程的死锁。
说明:
	1.出现死锁后,不会出现异常,不会出现提示,只是所有线程都处于阻塞状态,无法继续。
	2.使用同步时,要避免死锁。

线程通信

方法

wait():一旦执行此方法、当前线程就进入阻塞状态,并四方同步监视器
notify():一旦执行此方法,就会唤醒wait()的一个线程,如果有多个线程被wait,就唤醒优先级高的那个。
notifyAll():一旦执行此方法,就会唤醒所有被wait()的线程

说明

1.wait(),notify(),notifyALll()三个方法必须使用在同步代码块或同步方法中。
2.wait(),notify(),notifyALll()三个方法的调用者必须时同步代码块或同步同步方法中的同步监视器
3.wait(),notify(),notifyALll()三个方法时定义在java.lang.Objetct类中。

面试题

1.synchroized与lock的异同?
相同:二者都可以解决线程安全问题
不同:synchroized机制在执行完相应的同步代码以后,自动的四方同步监视器。Lock需要手动的启动同步(lock()),同时结束也需要手动打是是西安(unclock)
2.sleep()与wait()的异同?
相同:一旦执行方法,都可以是当前线程进入阻塞状态。
不同:1)两个方法声明的位置不同,Thread类中声明sleep(),Object类中声明wait()
	 2) 调用的要求不同,sleep()可以在任何需要的场景线调用。waiy()必须使用在同步代码块或同步方法中。
	 3)关于是否释放同步监视:如果两个方法都使用在同步代码块或同步方法中,sleep()不会释放锁,wait()会释放锁
3.写一个安全的单列模式
class Back{
    private Back(){

    };
    private static Back instance=null;
    private Back getInstance(){
        if(instance!=null){
            return instance;
        }
        synchronized (this) {
            if (instance == null) {
                instance = new Back();
            }
            return instance;
        }

    }
}

多线程

原文:https://www.cnblogs.com/lq123/p/13905101.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!