Java--多线程

2021/10/19 22:09:50

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

十:多线程_lsqstudy的博客-CSDN博客

Java多线程超详解_weixin_44797490的博客-CSDN博客_java多线程

需要明白:

关于继承的方式,遇到同步方法或者同步代码快的时候,此时的锁是类.class,且需要共享数据的时候,在定义的数据的时候,此方式是static的静态属性(因为静态方法或属性,是由类的加载而加载的,若非,则会被执行多此,则此线程不安全)

关于实现的方式,遇到同步方法或者同步代码快的时候,此时的锁是this(或者是唯一的一种对象)

更喜欢实现的方式来做多线程,不用担心数据共享的麻烦

 1.start():启动当前线程,执行当前线程的run()
 * 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 millitime):让当前线程“睡眠”指定时间的millitime毫秒)。在指定的millitime毫秒时间内,
 *                          当前线程是阻塞状态的。
 * 10.isAlive():返回boolean,判断线程是否还活着

  • Java的调度方法
    • 同优先级线程组成先进先出队列(先到先服务),使用时间片策略
    • 对高优先级,使用优先调度的抢占式策略
    •  MAX_PRIORITY:10
       *   - MIN _PRIORITY:1
       *   - NORM_PRIORITY:5 --->默认优先级
       * - 涉及的方法
       *   - getPriority() :返回线程优先值
       *   - setPriority(intnewPriority) :改变线程的优先级
    •  面试题:synchronized 与 Lock的异同?
       *    相同:二者都可以解决线程安全问题
       *    不同:synchronized机制在执行完相应的同步代码以后,自动的释放同步监视器
       *         Lock需要手动的启动同步(lock()),同时结束同步也需要手动的实现(unlock())
       *
       * 2.优先使用顺序:
       *      Lock 同步代码块(已经进入了方法体,分配了相应资源)同步方法(在方法体之外)
      线程通信的例子:使用两个线程打印1-100。线程1, 线程2 交替打印
       *
       * 涉及到的三个方法:
       * wait():一旦执行此方法,当前线程就进入阻塞状态,并释放同步监视器。
       * notify():一旦执行此方法,就会唤醒被wait的一个线程。如果有多个线程被wait,就唤醒优先级高的那个。
       * notifyAll():一旦执行此方法,就会唤醒所有被wait的线程。
       *
       * 说明:
       *      1.wait(),notify(),notifyAll()三个方法必须使用在同步代码块或同步方法中。
       *      2.wait(),notify(),notifyAll()三个方法的调用者必须是同步代码块或同步方法中的同步监视器。
       *         否则,会出现IllegalMonitorStateException异常
       *      3.wait(),notify(),notifyAll()三个方法是定义在java.lang.Object类中。
       
  • 面试题:sleep() 和 wait()的异同?
     * 1.相同点:一旦执行方法,都可以使得当前的线程进入阻塞状态。
     * 2.不同点:1)两个方法声明的位置不同:Thread类中声明sleep() , Object类中声明wait()
     *          2)调用的要求不同:sleep()可以在任何需要的场景下调用。 wait()必须使用在同步代码块或同步方法中
     *          3)关于是否释放同步监视器:如果两个方法都使用在同步代码块或同步方法中,sleep()不会释放锁,wait()会释放锁。
     */
     


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


扫一扫关注最新编程教程