zoukankan      html  css  js  c++  java
  • 高级知识点:多线程,资源管理【笔记】

    高级知识点:多线程,资源管理【笔记】

    多线程

    线程安全性对于多线程来说是至关重要的,因此我们要加锁来加强安全性

    死锁分析

    在任何地方都可以线程切换,甚至在一句语句中间也可以

    要尽力的设想对自己不利的情况

    不利的情况:

    死锁的条件

    第一就是互斥等待

    第二个就是hold and wait,拿着一个锁去等待另一个锁

    第三个是循环等待,拿着a的等b,拿着b的等a

    第四个就是无法剥夺的等待

    这四个条件必须同时完成才可以形成死锁,不然都可能没法组成死锁,所以要破除死锁的话,就从其中找方法

    死锁防止

    破除互斥等待,这种一般无法破除

    破除hold and wait,可以一次性获取全部资源

    破除循环等待,可以按照顺序获取资源

    破除无法剥夺的等待,可以加入超时机制

    线程池

    创建线程开销大,为了防止这些开销,就出现了线程池,线程池就是预先建立好的一些线程,等任务派发,有了任务就去

    线程池的实现很多时候都是编程语言中就有各自的实现

    线程池的参数

    corepoolsize:线程池中初始线程数量,可能处于等待状态

    maximumpoolsize:线程池中最大允许的线程数量

    keepalivetime:超出corepoolsize部分线程,如果等待这些,那么等待时间将被回收

    线程池的java executor framework的演示

    具体代码如下:

    package interview.adv;
    
    import java.util.LinkedList;
    import java.util.List;
    import java.util.concurrent.ExecutionException;
    import java.util.concurrent.ExecutorService;
    import java.util.concurrent.Executors;
    import java.util.concurrent.Future;
    
    import interview.designpattern.task.CodingTask;
    
    public class ExecutorTester {
    
      public static void main(String[] args)
          throws InterruptedException, ExecutionException {
        ExecutorService executor = Executors.newFixedThreadPool(3);
    
        List<Future<?>> taskResults = new LinkedList<>();
        for (int i = 0; i < 10; i++) {
          taskResults.add(executor.submit(new CodingTask(i)));
        }
        System.out.println("10 tasks dispatched successfully.");
    
        for (Future<?> taskResult : taskResults) {
          taskResult.get();
        }
    
        System.out.println("All tasks finished.");
        executor.shutdown();
      }
    }
    

    资源管理

    java垃圾回收

    不会被引用的对象会被回收掉

    垃圾回收包括minor GC 和 full GC

    垃圾回收的时候所有的运行都会暂停

    java资源管理(输入输出)

    内存会被回收,资源不会被释放,比如databaseconnection需要databaseconnection.close()来释放,操作大概

    Java1.6的时候

    Java1.7以后

    c++的资源管理

    c++没有final,没有try with resource,但是有析构函数

    大致做法:


    大部分的语言都有自己的垃圾回收机制

    感谢观看,文笔有限,博客不出彩,还请多多见谅
  • 相关阅读:
    归并排序
    将文件存储到数据库中(MySQL)
    JS实现日历控件选择后自动填充
    HDU 1358 Period KMP
    Adobe Flash Player已经终止一项可能不安全的操作,解决方案
    将文件从数据库(MySQL)中进行读取
    Ubuntu java开发环境配置
    硬盘结构和原理
    杭电 HDU 1242 Rescue
    mysql workbench建表时PK,NN,UQ,BIN,UN,ZF,AI
  • 原文地址:https://www.cnblogs.com/jokingremarks/p/14474124.html
Copyright © 2011-2022 走看看