JUC并发编程学习笔记 狂神JUC并发编程 总的来说还可以,学到一些新知识,但很多是学过的了,深入的部分不多. 线程与进程 进程:一个程序,程序的集合,比如一个音乐播发器,QQ程序等.一个进程往往包含多个线程,且至少包含一个线程. 线程:进程中的实际运作单位. Java默认有几个线程? 2个,main和GC Java创建线程的方式? 3种,继承Thread,实现Runnable,实现Callable. Java真的可以开启线程么? Java不能自己开启线程,而是通过调用本地方法,调用C++代码开…
小结与扩展 池的最大的大小如何去设置! 了解:IO密集型,CPU密集型:(调优)  //1.CPU密集型 几核就是几个线程 可以保持效率最高 //2.IO密集型判断你的程序中十分耗IO的线程,只要大于这个线程数就行 一般设置为这个耗IO线程数的两倍  package com.kuang.pool; ​ import java.util.concurrent.*; ​ // Executors工具类 三大方法 ​ //使用了线程池之后,使用线程池来创建线程 public class Demo01…
文章目录 1.四大函数式接口(必须掌握) 1.1 function 1.2 Predicate 1.3 Consumer 1.4 Supplier 1.四大函数式接口(必须掌握) 1.lambda表达式 2.函数式接口 3.链式编程 4.stream流式计算 函数式接口:只有一个方法的接口 @FunctionalInterface public interface Runnable { public abstract void run(); } 超级多的FunctionalInterface 简…
一.JUC简介 在Java5.0提供了java.util.concurrent包,简称JUC,即Java并发编程工具包.JUC更好的支持高并发任务. 具体的有以下三个包: java.util.concurrent java.util.concurrent.atomic java.util.concurrent.locks 二.Lock锁 1.传统的synchronized锁 /** * synchronized售票例子 */ public class SynSaleTicket { //真正在公…
什么是JUC java.util.concurrent* public class Test1 { public static void main(String[] args) { //获取处理器核数 System.out.println(Runtime.getRuntime().availableProcessors()); } } com.antake.Test1 4 Process finished with exit code 0 回顾 线程有几个状态 public enum State…
Java编程思想,并发编程学习笔记. 一.基本的线程机制 1.定义任务:Runnable接口 线程可以驱动任务,因此需要一种描述任务的方式,这可以由Runnable接口来提供.要想定义任务,只需实现Runnable接口并编写run方法,使得该任务可以执行你的命令.   class MyTask implements Runnable {    private String mName;     public MyTask(String name) {    mName = name;   }  …
Executor执行已提交的 Runnable 任务的对象.此接口提供一种将任务提交与每个任务将如何运行的机制(包括线程使用的细节.调度等)分离开来的方法.通常使用 Executor 而不是显式地创建线程.例如,可能会使用以下方法,而不是为一组任务中的每个任务调用 new Thread(new(RunnableTask())).start(): 实例化Executor对象时,通常使用Executors中的静态方法返回Executor的子接口ExecutorService:这里主要介绍Execut…
1. 概述 1.1 什么是线程池 与jdbc连接池类似,在创建线程池或销毁线程时,会消耗大量的系统资源,因此在java中提出了线程池的概念,预先创建好固定数量的线程,当有任务需要线程去执行时,不用再去新创建线程,而是从线程池中获取线程去执行任务,任务执行完成后将线程重新归还到线程池,这样的一个池就叫做线程池. 1.2 使用线程池的优势 第一:降低资源消耗.通过重复利用已创建的线程降低线程创建和销毁造成的消耗. 第二:提高响应速度.当任务到达时,任务可以不需要的等到线程创建就能立即执行. 第三:提…
1. Future的使用 Future模式解决的问题是.在实际的运用场景中,可能某一个任务执行起来非常耗时,如果我们线程一直等着该任务执行完成再去执行其他的代码,就会损耗很大的性能,而Future接口就是Future的实现,它可以让当前线程将任务交给Future去执行,然后当前线程就可以去干别的事,知道耗时任务执行完成之后,当前线程直接获取结果即可.FutureTask的使用比较简单,只需要先实例化一个Callable对象,重写call方法,再创建一个FutureTask对象,将Callable…
1. Fork/Join 的概念 Fork指的是将系统进程分成多个执行分支(线程),Join即是等待,当fork()方法创建了多个线程之后,需要等待这些分支执行完毕之后,才能得到最终的结果,因此join就表示等待.在实际的使用中,如果毫无顾忌的使用fork()来开启线程,可能会由于线程过多而影响系统性能,因此在jdk中提供了ForkJoinPool线程池来对fork进行处理,以节省资源. 对于线程池来说,提交的任务数量并不总是与线程数相等的,大多数情况下一个物理线程可能需要执行多个逻辑任务.所以…