zoukankan      html  css  js  c++  java
  • (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() - 用于唤醒等待状态的所有线程。

    不忘初心,方得始终! 坚持!坚持!坚持!!
  • 相关阅读:
    delphi 字符串查找替换函数 转
    Delphi流的操作
    【BZOJ1316】树上的询问 点分治+set
    【BZOJ2406】矩阵 二分+有上下界的可行流
    【BZOJ1853/2393】[Scoi2010]幸运数字/Cirno的完美算数教室 DFS+容斥
    【BZOJ4999】This Problem Is Too Simple! 离线+树状数组+LCA
    【BZOJ2427】[HAOI2010]软件安装 Tarjan+树形背包
    【BZOJ3217】ALOEXT 替罪羊树+Trie树
    【BZOJ1336】[Balkan2002]Alien最小圆覆盖 随机增量法
    【BZOJ3435】[Wc2014]紫荆花之恋 替罪点分树+SBT
  • 原文地址:https://www.cnblogs.com/sumboy/p/9058596.html
Copyright © 2011-2022 走看看