• 1.新建一个maven项目

pom.xml配置

 <dependencies><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.18.20</version></dependency><dependency><groupId>ch.qos.logback</groupId><artifactId>logback-classic</artifactId><version>1.2.11</version></dependency></dependencies>

在resources.xml配置

<?xml version="1.0" encoding="UTF-8" ?>
<configuration><appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"><!-- encoders are assigned the typech.qos.logback.classic.encoder.PatternLayoutEncoder by default --><encoder><pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern></encoder></appender><root level="debug"><appender-ref ref="STDOUT" /></root>
</configuration>

2.概念:

进程
(1)程序由指令数据组成,但是这些程序要运行,数据要读写,就必须将指令加载到cpu,数据加载至内存,在指令运行过程之中还需要用到磁盘,网络设备等,进程就是来加载指令,管理内存,管理io
(2)当一个程序要运行,从磁盘加载这个程序至内存,这时候就开启了一个程序
(3)进程就可以视为一个实例,大部分程序可以同时运行多个进程,也可以启动一个进程实例
线程
(1)一个进程可以分为一个或多个线程
(2)一个线程就是一个指令流,将指令流按顺序一条条交给cpu执行
(3)在java之中,线程作为最小的调度单位,进程作为分配资源最小的单位,在windows之中进程是不活动的,只是作为线程的容器

二者对比
(1)进程是相互独立的,而线程存在进程内,是进程的一个子集
(2)进程拥有共享资源,如内存空间,供内部线程共享
进程之间的通讯:
(1)同一台计算机之间的进程通信称为:IPC

(2)不同计算机之间的进程通信,需要通过网络,并遵循共同的协议,例如http
(3)线程通信相对简单,因为它们共享进程内存,多个线程可以访问一个共享变量
(4)线程更轻量,线程上下文切换成本一般比进程上下文切换低。

并发:同一个时间应对多件事的能力
并行:同一个时间做多件事的能力

同步和异步调用:
(1)需要等待结果返回,才能运行的就是同步
(2)不需要等待结果返回,能继续运行的叫异步
同步在多线程之中,就是让多个线程步调一致

  • 3.创建线程的方法

(1.)使用thread

package juc;import lombok.extern.slf4j.Slf4j;@Slf4j(topic = "juc.test")
public class test {public static void main(String[] args) {Thread t=new Thread(){@Overridepublic void run(){log.debug("runging");}};t.setName("t1");t.start();log.debug("running");}
}

运行结果

18:06:54.112 [main] DEBUG juc.test - running
18:06:54.114 [t1] DEBUG juc.test - runging

(2)Runnable
源码:

@FunctionalInterface
public interface Runnable {public abstract void run();
}

只有一个抽象方法,在jdk之中如果带有@FunctionalInterface这个注解就可以被lamnda简化
在Thread implements Runnable
Runnable更容易与线程池这种高级api结合在一起
用Runnable让任务脱离了Thead这种继承体系
(3) Callable
源码

@FunctionalInterface
public interface Callable<V> {/*** Computes a result, or throws an exception if unable to do so.** @return computed result* @throws Exception if unable to compute a result*/V call() throws Exception;
}

有返回值,并且能抛出异常
例子·:

package juc;import lombok.extern.slf4j.Slf4j;import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.FutureTask;@Slf4j(topic = "juc.test2")
public class Test2 {public static void main(String[] args) throws ExecutionException, InterruptedException {FutureTask<Integer> integerFutureTask = new FutureTask<Integer>(new Callable<Integer>() {@Overridepublic Integer call() throws Exception {log.debug("runing");Thread.sleep(1000);return 1000;}});Thread thread = new Thread(integerFutureTask,"t1");thread.start();log.debug("{}",integerFutureTask.get());}
}

结果

19:11:52.852 [t1] DEBUG juc.test2 - runing
19:11:53.867 [main] DEBUG juc.test2 - 1000Process finished with exit code 0

线程阻塞1秒才获取结果 52秒 …53秒

juc并发编程学习(一)相关推荐

  1. 基于《狂神说Java》JUC并发编程--学习笔记

    前言: 本笔记仅做学习与复习使用,不存在刻意抄袭. -------------------------------------------------------------------------- ...

  2. 厚积薄发打卡Day26:狂神说Java之JUC并发编程<代码+笔记>(上)

    前言: 学习视频来源:[狂神说Java]JUC并发编程最新版通俗易懂 一个十分优秀且励志的技术大牛+Java讲师,十分推荐他的频道:遇见狂神说

  3. Java JUC并发编程详解

    Java JUC并发编程详解 1. JUC概述 1.1 JUC简介 1.2 进程与线程 1.2 并发与并行 1.3 用户线程和守护线程 2. Lock接口 2.1 Synchronized 2.2 什 ...

  4. 周阳老师JUC并发编程

    1. 序章 1)JUC是什么? java.util.concurrent在并发编程中使用的工具包 对JUC知识的高阶内容讲解和实战增强 2)为什么学习并用好多线程极其重要? 硬件方面: 摩尔定律: 它 ...

  5. 爬梯:JUC并发编程(三)

    学习资源整理自:B站<狂神说> 书接上回 JUC并发编程 12.CompletableFuture 异步回调 理解 父类:Future,对将来的某个事件的结果进行建模 可以用ajax进行理 ...

  6. 爬梯:JUC并发编程(二)

    学习资源整理自:B站<狂神说> 书接上回 JUC并发编程 8.线程池(重点) 线程池:三大方法.七大参数.四种拒绝策略 池化技术 程序的执行,本质:占用系统的资源!优化资源的使用==> ...

  7. 爬梯:JUC并发编程(一)

    学习资源整理自:B站<狂神说> JUC并发编程 1.基础概念 JUC 就是 java.util.concurrent java到底能否自己开启线程? 答案是否定的,在创建线程的底层,使用的 ...

  8. 并发编程——JUC并发编程知识脑图

    摘要 并发编程在软件编程中尤为突出和重要,在当今面试或工作中也是不可缺少的.作为一名高级java开发工程师,并发编程的技能已经成为了重要的一项.本博文将详细介绍并发编程中的知识点和知识脑图,帮助大家更 ...

  9. Java并发编程学习 + 原理分析(建议收藏)

    总结不易,如果对你有帮助,请点赞关注支持一下 微信搜索程序dunk,关注公众号,获取博客源码 Doug Lea是一个无私的人,他深知分享知识和分享苹果是不一样的,苹果会越分越少,而自己的知识并不会因为 ...

最新文章

  1. 支持向量机(SVM)必备知识(KKT、slater、对偶)
  2. 【jQuery插件分享】Cropper——一个简单方便的图片裁剪插件
  3. 导出来的双引号怎么处理_阿里巴巴国际站图片处理小技巧
  4. apple tv 开发_如何防止Apple TV进入睡眠状态
  5. 网管型工业交换机如何创建网络冗余
  6. 学习 AngularJs 终于有点进步了。
  7. LeetCode 317. 离建筑物最近的距离(逆向BFS)*
  8. 如何找到python的安装路径_如何查看python的安装路径
  9. 怎么通过路径藏值,然后通过js,jq获取页面路径带过来的值
  10. ActiveMQ学习总结(8)——消息队列设计精要
  11. java 画金刚石_帮忙改错!java 画金刚石
  12. oracle 视图去重复,CSS_Oracle几种查找和删除重复记录的方法总结,平时工作中可能会遇到当试图 - phpStudy...
  13. php devel 5.3.3 26,php-5.3.27安装
  14. Creative Groove Randomizer插件:Audiomodern Playbeat节拍生成器
  15. android号码查询归属地,号码归属地识别-Android电话应用
  16. Android 热补丁动态修复
  17. markdown实心圆点空心圆点、层级
  18. 3dmax运动混合器的使用
  19. app做好后如何上线_自己做的app从做好到上架需要什么手续或过程?
  20. 密码学编程基础——换位加密

热门文章

  1. iOS UILable换行相关设置
  2. steam好友服务器当前处于离线状态,steam怎么修改在线状态-steam设置离线、想交易、隐身等状态的方法 - 河东软件园...
  3. 引起计算机故障的因素有哪些,电源故障引起的电脑问题有哪些
  4. 世界顶级黑客,都有哪些神仙操作?这篇文章带你了解一下!
  5. 如何将抖音快手短视频好看视频等任何直播平台视频转为MP4
  6. PROE CREO 各类3D模型图档大全-8.2G
  7. MySQL数据库锁机制之MyISAM引擎表锁和InnoDB行锁详解
  8. k8s——pv(静态+动态storageclass)与pvc
  9. 年轻设计师如何做好商业设计
  10. 钗黛双收:若你也同Vim难割舍,却又看Emacs情切切