• (1)线程的常用方法 (2)线程的同步机制 (3)网络编程的常识


    1.线程的常用方法
    static void sleep(long millis)
    - 用于使得当前正在执行的线程进入休眠状态,休眠参数指定的毫秒(重点)。
    static void sleep(long millis, int nanos)
    - 用于休眠参数指定的毫秒+纳秒,1秒=1000毫秒 1毫秒=1000微秒 1微秒=1000纳秒

    int getPriority() - 用于获取调用对象的优先级并返回。
    void setPriority(int newPriority) - 用于设置调用对象的优先级。
    - 优先级越高则表示优先获取CPU时间片的机会越大,但不保证该线程一定先执行。

    void join() - 用于等待调用对象所表示的线程终止(重点)。
    void join(long millis) - 用于等待调用对象所表示线程终止的最长时间为参数指定毫秒
    void join(long millis, int nanos) - 用于等待参数指定毫秒加上纳秒。

    boolean isDaemon() - 用于判断调用对象所表示的线程是否为守护线程。
    void setDaemon(boolean on) - 用于设置调用对象所表示线程为守护线程。
    - 该方法的调用必须在线程调用start()方法之前。
    - 当所有非守护线程结束时,则守护线程随之结束。

    2.线程的同步机制(重点)
    2.1 基本概念
    当多个线程同时访问同一种共享资源时,可能会造成数据的不一致或覆盖等问题,此时就需要对线程之间进行协调和通信,该方式就叫做线程的同步机制。

    2.2 解决方案
    由程序结果可知:当两个线程同时进行取款时,导致最终的账户余额不合理。
    原因:线程一还没有来得及将取款后的余额写入数据库,但线程二已经开始执行。
    解决方案:将线程的并发操作改为线程的串行操作即可。
    引发问题:该方式会造成线程执行的效率降低,因此以后的开发中能不用则不用。

    2.3 实现方式
    在Java语言中可以借助synchronized关键字实现同步锁/对象锁机制,来保证线程执行的原子性,具体方式如下:
    (1)使用同步语句块的机制来实现
    synchronized(对象的引用){
    编写所有需要锁定的代码块;
    }
    (2)使用synchronized关键字修饰整个方法,表示锁定整个方法的方法体。
    该方式等价于 synchronized(this){ 方法体; }。

    2.4 实现原理(尽量理解)
    当多个线程启动之后同时去抢占共享资源,若其中一个线程抢到了共享资源,则其他线程进入阻塞/等待状态,直到该线程执行完毕所有锁定的代码后会自动释放对象锁,此时等待的线程又可以抢占共享资源,抢到对象锁的代码执行锁定的代码,抢不到的线程继续等待。

    2.5 死锁(了解)
    线程一执行的代码:
    public void run(){

    synchronized(a){ 持有对象锁a,等待对象锁b
    synchronized(b){
    代码块;
    }
    }
    }
    线程二执行的代码:
    public void run(){

    synchronized(b){ 持有对象锁b,等待对象锁a
    synchronized(a){
    代码块;
    }
    }
    }

    经验:
    在以后的开发中切记不要使用同步语句块的嵌套结构!!!

    2.6 Object类中的常用方法
    void wait()
    - 用于让当前线程进入等待状态,直到其他线程调用notify()/notifyAll()方法。
    void wait(long timeout)
    - 用于让当前线程进入等待状态,直到其他线程调用notify()/notifyAll()方法,
    或者参数指定的毫秒已经过去了。
    void notify() - 用于唤醒等待状态的一个线程(随机)。
    void notifyAll() - 用于唤醒等待状态的所有线程。

    不忘初心,方得始终! 坚持!坚持!坚持!!
  • 相关阅读:
    HDU 4069 Squiggly Sudoku
    SPOJ 1771 Yet Another NQueen Problem
    POJ 3469 Dual Core CPU
    CF 118E Bertown roads
    URAL 1664 Pipeline Transportation
    POJ 3076 Sudoku
    UVA 10330 Power Transmission
    HDU 1426 Sudoku Killer
    POJ 3074 Sudoku
    HDU 3315 My Brute
  • 原文地址:https://www.cnblogs.com/sumboy/p/9058596.html
Copyright © 2020-2023  润新知