zoukankan      html  css  js  c++  java
  • 基础知识巩固五

    多线程

    因为CPU的大部分时间都是空闲的,例如,在等待用户输入数据时,CPU什么也不做,多线程可以使程序反应更快、交互性更强、执行效率更高。

    实现多线程,可以新建一个类实现Runnable接口,也可以继承Thread类

    Thread类的方法有:

    1. Thread()创建空线程
    2. Thread(task:Runnable)为指定任务创建一个线程
    3. start():启动线程,使方法run被JVM调用
    4. isAlive():测试线程当前是否正在运行
    5. setPriority(P:int)
    6. join()
    7. sleep(millisecond )
    8. yield():使线程暂停并允许执行其他的Thread变量,赋值null表明它被停止

    当一个休眠线程的interrupt()方法被调用时,会抛出一个异常,不过interrupt()方法极少在线程上被调用

    注:如果在一个循环中调用了sleep方法,那就应该将循环放在try-catch块中,否则即使使线程被中断,它也可能继续执行

    线程池

    管理并发执行任务个数的理想方法

    ExecutorService是Executor的子接口

    使用ExecutorServise:

    ExecutorService executor = Executors.newFixedThreadPool(3);

    executor.execute(Runnable object);

    executor.shutdown();

    创建新线程池的两个方法:

    1、newFixedThreadPool(int):创建一个线程数固定不变的线程池

    2、创建一个按需创建新线程的线程池

    isTerminated():如果线程池中所有任务都被终止,返回true.

    java目前支持的三个具体的阻塞队列

    1、ArrayBlockingQueue:使用数组实现

    2、LinkedBlockingQueue:使用链表实现

    3、PriorityBlockingQueue:优先队列

    主要要使用的方法有:

    1、put(e):将e元素添加到集合中

    2、take():将集合中最先的元素取出

     

     

    信号量

    可以用来限制访问共享资源的线程数

    Semaphore(int):创建一个带指定数目许可的信号量,公平策略默认为false

    Semaphore(int,boolean):许可数目,公平策略,如果为true,它将会选等待时间最久的线程。

    信号量的方法有:

    acquire():获取许可

    release():释放许可

     

    避免死锁的方法

    资源排序:给每一个需要锁的对象指定一个顺序,确保每一个线程都按这个顺序来获取锁

    Collection类提供留个静态方法来将集合转成同步版本

    1. synchronizedCollection(c:collection):Collection
    2. synchronizedList(list:List):list
    3. synchronizedMap(m:Map):Map
    4. synchronizedSet(s:Set):Set
    5. synchronizedSortedMap(s:SortedMap):sortedMap
    6. synchronizedSoriedSet(s:SortedSet):SortedSet

    java.until.concurrent.locks下的接口有:1、Condition   2、Lock   3、ReadWriteLock

    ReentrantLock是Lock的实现类:Lock lock = new ReentrantLock()

    ReentrantLock有两个构造函数,第一个无参构造函数,代表创建一个fair=false的锁,一个参数的构造方法代表创建具有给定公平策略的锁,参数为boolean类型

    Condition将Object监视器方法(wait、notify和notifyAll)分解成截然不同的对象,以便通过将这些对象与任意的lock实现组合使用。

    condition的三个主要方法:1、await()    2、signal()   3、signalAll()

    Lock的三个主要方法:1、lock()   2、unlock()   3、newCondition()

     

  • 相关阅读:
    csuoj 1391: Boiling Vegetables
    csuoj 1392: Number Trick
    nyist 78 圈水池
    1393: Robert Hood 旋转卡壳 凸包
    模板 旋转卡壳 凸包
    模板 凸包 旋转卡壳
    ASP.NET Web API2返回值处理流程
    DependencyInjection源码解读之ServiceProvider
    深入研究EF Core AddDbContext 引起的内存泄露的原因
    私有云方案——利用阿里云云解析实现DDNS
  • 原文地址:https://www.cnblogs.com/shigeng/p/8563436.html
Copyright © 2011-2022 走看看