java多线程设计模式

2023-10-29

1 I/O处理比较花费时间,故把执行I/O处理和非IO处理的线程分开。CPU执行速度很快、而内存的写入、读取很慢,所以有关CPU和内存交互会降低指令的速度。
2 start方法运行有2个步骤
启动新的线程
运行new对象的run方法
3 所有线程结束,程序结束。  主线程可以先结束,但并不表示程序结束。
4 一个线程已经获得锁定,其他线程都不能执行该实例的synchronized方法。
5 wait set 线程休息区,当线程调用wait()方法时,线程自动进入wait set 区等待,直到被唤醒。
6 wait notify notifyAll方法都是在锁定时调用,唤醒的线程重新等待锁。并且都有对象obj.wait(),否则默认this.wait()
7 线程好坏评判标准
   安全性和生存性为必考虑
安全性    ---不损坏对象
生存性    ---进行必要处理 , 防止线程挂掉
复用性    ---可在利用类
性能      ---能快速、大量的进行处理
吞吐量越大、响应性越快、容量越大,性能越好
8 可能发生死锁的3个条件
a、具有多个sharedResourse参与者,即共享资源
b、线程锁定一个sharedSourse时,还没解除前就去锁定另一个sharedSourse.
c、获取sharedSourse的顺序不固定
只要破坏a b c中的任意一个条件,就可以避免死锁的发生。
9 临界区的大小与执行性能
获取锁定需要花时间
线程冲突时必须等待
10 有锁定时一定要记得解锁,中间不能有return 或是异常。
11 要在线程中共享long 和 double 的字段,必须在synchronized中操作,或是声明成volatile
12 Immutable Thread(不可变线程)
字段为 final私有
没有setter方法
  优点:不需要synchronized字段,频繁访问的情况下可以大大提高性能。
13 被阻挡而等待
等待
while(!ready){
wait();
}


唤醒
ready=true;
notify()/notifyAll()
14 ReadWriteLock
Read  Read    不冲突
Read  Write   冲突
Write  Write   冲突
15 进程与线程的区别
a 进程的内存是独立的、线程的内存是共享的

16 interrupt() 方法会唤醒sleep/wait/join ,但会直接到catch语句,而不是运行其后面的语句。
17 join()等待线程结束










疑问:
1 同一个类中,2个方法用了synchronized, 调用其中的一个方法,另一个方法也被锁住了?
答:是










1、多核、多CPU线程
Lock
lock.lockInterruptibly(),其实和lock.lock()效果一样,只有当调用interrupt()方法时,前面的会先运行catch里代码。
Condition 
Timer
TimerTask
Callable<V>
2 WeakReference弱引用,防止内存泄露,将弱引用对象占用空间释放。
3  Futrue<V>  FutrueTask<V>
4 JAVA netive关键字
native关键字说明其修饰的方法是一个原生态方法,方法对应的实现不是在当前文件,而是在用其他语言(如C和C++)实现的文件中。
Java语言本身不能对操作系统底层进行访问和操作,但是可以通过JNI接口调用其他语言来实现对底层的访问。
5 public ThreadPoolExecutor(int corePoolSize,  
                              int maximumPoolSize,  
                              long keepAliveTime,  
                              TimeUnit unit,  
                              BlockingQueue<Runnable> workQueue,  
                              ThreadFactory threadFactory,  
                              RejectedExecutionHandler handler)
a.当线程池小于corePoolSize时,新提交任务将创建一个新线程执行任务,即使此时线程池中存在空闲线程。 
b.当线程池达到corePoolSize时,新提交任务将被放入workQueue中,等待线程池中任务调度执行 
c.当workQueue已满,且maximumPoolSize>corePoolSize时,新提交任务会创建新线程执行任务 
d.当提交任务数超过maximumPoolSize时,新提交任务由RejectedExecutionHandler处理 
e.当线程池中超过corePoolSize线程,空闲时间达到keepAliveTime时,关闭空闲线程 
f.当设置allowCoreThreadTimeOut(true)时,线程池中corePoolSize线程空闲时间达到keepAliveTime也将关闭 
  





本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

java多线程设计模式 的相关文章

  • 彻底搞懂Java中的synchronized关键字

    synchronized的作用 synchronized 的作用主要有三 原子性 所谓原子性就是指一个操作或者多个操作 要么全部执行并且执行的过程不会被任何因素打断 要么就都不执行 被synchronized修饰的类或对象的所有操作都是原子
  • 多个线程访问共享对象和数据的方式

    一 如果每个线程执行的代码相同 可以使用同一个Runnable 对象 这个Runnable对象中有那个共享的数据 例如买票系统就可以这样做 代码如下 package com thread class ShareDataTest1 publi
  • 多线程的作用

    1 发挥多核CPU的优势 随着工业的进步 现在的笔记本 台式机乃至商用的应用服务器至少也都是双核的 4核 8核甚至16核的也都不少见 如果是单线程的程序 那么在双核CPU上就浪费了50 在4核CPU上就浪费了75 单核CPU上所谓的 多线程
  • 一张脑图解析 ConcurrentHashMap 的重点知识点

    欢迎在评论区交流 一起学习 一起进步
  • 多线程下载

    原理 服务器cpu分配给每条线程的时间片是相同的 服务器带宽平均分配给每个线程 所以客户端开启的线程越多就能抢占到更多的服务器资源 用java实现 public class NultiDownload static String path
  • 可重入锁(ReentrantLock和synchronized原理及区别)+锁升级

    目录 1 Synchronized底层原理 ReentrantLock实现的原理及使用 Java中synchronized 和 ReentrantLock 有什么不同 追问3 synchronized锁升级的过程说一下 追问4 synchr
  • java多线程-Thead线程学习记录笔记

    介绍的内容 主要介绍多线程的基本概念到后面的基本使用 以及一些稍微的原理猜测 个人笔记 不喜勿喷 目录 目录 一 线程使用 1 1 概念 1 2 线程生命周期 1 3 java中实现的方式 1 3 1 继承线程 Thread 1 3 2 实
  • JAVA高并发---收藏的好文章(持续更新)

    JAVA高并发 AQS详解 转载 学习前因 本来对多线程略懂 最近忽然看到了CountDownLatch 的用法 忽然想简单看看它的原理 了解一下它阻塞线程的方法 我只知道阻塞线程的lock 和wait notifyAll 才发现原来还有L
  • CopyOnWriteArrayList部分源码分析

    CopyOnWriteArrayList部分源码分析 我们都知道ArrayList是基于数组实现的可动态扩容的集合 但是他实际上也是线程不安全的 而在JUC java util concurrent 下有个线程安全的数组集合 就是CopyO
  • 多线程异常 和 事务(一)

    1 首先提出几个问题 1 1 子线程中的异常在主线程中是否可以catch 1 2 在spring中主线程有事务 那么子线程中有事务码 2 先看第一个问题 2 1 我们在main方法里面测试 代码如下 package com pingan t
  • 悲观锁(Synchronized)和乐观锁(CAS)

    文章目录 悲观锁和乐观锁 Synchronized Synchronized使用 Synchronized底层原理 Java1 6对Synchronized的优化 synchronized的等待唤醒机制 CAS CAS使用 CAS底层原理
  • UncaughtExceptionHandler异常处理机制

    解释 UncaughtExceptionHandler类是java1 5里新增的 Thread类里面的一个函数式接口类的 类名意思为 未捕获的异常处理 该类的注释接口意思 接口处理器时调用线程突然终止 由于未捕获到异常 当一个线程要终止由于
  • Java 并发工具包 java.util.concurrent 用户指南

    http blog csdn net defonds article details 44021605 comments 译序 本指南根据 Jakob Jenkov 最新博客翻译 请随时关注博客更新 http tutorials jenko
  • 【2021最新版】Java多线程&并发面试题总结(108道题含答案解析)

    文章目录 JAVA并发知识库 1 Java中实现多线程有几种方法 2 继承Thread类 3 实现Runnable接口 4 ExecutorService Callable Future有返回值线程 5 基于线程池的方式 6 4 种线程池
  • Java并发总结之Java内存模型

    本文主要参考 深入理解Java虚拟机 和 Java并发编程的艺术 对Java内存模型进行简单总结 一 CPU和缓存一致性 1 CPU高速缓存 为了解决CPU处理速度和内存处理速度不对等的问题 就是在CPU和内存之间增加高速缓存 当程序在运行
  • Java-多线程-给线程命名

    Java 多线程 给线程命名 在Java中 通过继承Thread创建的线程 有以下两种方式可以给线程命名 通过构造器命名 因为线程类继承自Thread类 所有也继承了Thread的name属性 可以通过super的方法调用父类构造器 将na
  • 【多线程】线程安全、锁的同步和异步

    一 基本概念 线程安全 当多个线程访问某一个类 对象或方法 时 这个类始终都能表现出正确的行为 那么这个类 对象或方法 就是线程安全的 非线程安全 非线程主要是指多个线程对同一个对象中的同一个实例变量进行操作时会出现值被更改 值不同步的情况
  • Java多线程的同步问题

    在多线程的编程环境中 可能会有两个或者更多的线程试图同时访问一个有限的资源 必须对这种潜在的资源冲突进行预防 解决办法 在线程使用一个资源的时候 我们为其加锁即可 访问资源的第一个线程为其加上锁以后 其它线程便不能访问那个资源 除非获得那个
  • 多线程太可怕了

    今天发现了一个多线程引起的bug 然后进一步体会到 这东西太容易出问题了 首先要说明的是 出问题的代码可不是一般人写的 是由一个叫EPAM systems的世界知名外包公司的人写的 这些java程序员个个经验丰富 心高气傲 貌似base在乌
  • 01、Java并发 Java ExecutorService

    ExecutorService 是 Java java util concurrent 包的重要组成部分 是 Java JDK 提供的框架 用于简化异步模式下任务的执行 一般来说 ExecutorService 会自动提供一个线程池和相关

随机推荐

  • office中excel设置下拉框多选

    我参照了这篇文章 https www php cn topic excel 444717 html 这篇文章整体写得不错 但是有些小瑕疵 问题1 在模块1中保存 这里并没有说清楚 具体是 VBA编辑器中 插入 模块 然后复制以下代码 Pub
  • js if else return不管用_前端知识013 学会异步,JS不再烧脑

    01 同步和异步 0101 认识同步异步 0102 前端经常遇到的异步操作 三个经典例子 0103 拿到异步的结果 轮询和回调 0104 回调的几种方式 02 Promise 0201 Promise基本用法 0202 Promise 基本
  • 【打卡-蓝桥杯】Day 7

    题目1 基础练习 芯片测试 解题思路 因为好的芯片多于坏的 所以如果是好芯片 那个被测试为 1 的 总数 gt n 2 代码 n int input arr list map int input split for in range n f
  • python自动化控制设备有限公司_华为 Python网络自动化

    哈喽 大家好 我是艺博东 是一个思科出身 专注于华为的网工 好了 话不多说 我们直接进入正题 光棍二十年 不知道情人节是什么鬼东西 还是好好学技术吧 努力 奋斗吧 为了早日走向人生巅峰 迎娶白富美 拼了 1 安装环境并导入相关模块 首先是安
  • 错误 0xc0202009: 数据流任务 1: SSIS 错误代码 DTS_E_OLEDBERROR。出现 OLE DB 错误。

    原来是一个varchar字段出出现了 和 等特殊字符 这个在insert语句中没有问题 但是使用导入导出会报错 最后要注意的是 导入导出使用的是BulkInsert 方式 每次可能读取一大段 多行记录一起处理 如果这批数据中有错 那么 程序
  • html5注册阿里巴巴作业,面试分享:2018阿里巴巴前端面试总结(题目+答案)

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 使用js实现一个持续的动画效果 最开始的思路是用定时器实现 最后没有想的太完整 面试官给出的答案是用 requestAnimationFrame var e document getElemen
  • Java基础(四)——多态、抽象类、接口、内部类

    一 多态 1 多态性是指同一操作作用于某一类对象 可以有不同的解释 产生不同的执行效果 同一事件发生在不同的对象身上 有不同的效果 2 多态存在的三个必要条件 a 需要存在继承和实现关系 b 同样的方法调用而执行不同操作 运行不同代码 重写
  • JS 中把对象按属性名字母顺序进行排序和倒序

    本文同步发布在 JS 中把对象按属性名字母顺序进行排序和倒序 我们在进行前端开发的时候 有时需要对参数进行签名 签名很多第一步是把对象按属性名字母顺序进行排序 那么在 JS 中如何实现呢 实现方式很多 这边介绍一种通过 ES6 的方式来实现
  • Andy‘s First Dictionary C++ STL set应用

    目录 题目描述 思路分析 代码 题目描述 原文 Andy 8 has a dream he wants to produce his very own dictionary This is not an easy task for him
  • vue实现动态锚点

    div class dialog header item item div 需要点击的目标增加click事件 并且把索引传下去 没有索引也没有关系 想传什么传什么 锚点 getActiveClass index let jump docum
  • 「网页开发|前端开发|Vue」05 Vue实战:从零到一实现一个网站导航栏

    本文主要介绍如何从最开始的草图 通过确定基本结构 修改元素布局 美化外观来实现一个网站导航栏 从而熟悉网页开发的基本流程 同时 我们会把性能 规范性 可维护性方面的代码优化也考虑其中 文章目录 本系列前文传送门 一 场景说明 设计目标 二
  • 几种常用激活函数的简介

    1 sigmod函数 函数公式和图表如下图 在sigmod函数中我们可以看到 其输出是在 0 1 这个开区间内 这点很有意思 可以联想到概率 但是严格意义上讲 不要当成概率 sigmod函数曾经是比较流行的 它可以想象成一个神经元的放电率
  • Python正则表达式学习(3)——re.compile()

    re compile pattern flags 0 将正则表达式 pattern 编译为正则表达式对象 可用于使用其 match 和search 方法进行匹配 顺序 prog re compile pattern result prog
  • Pinctrl子系统之一了解基础概念

    1 Linux Pinctrl子系统简介 在许多soc内部都包含有pin控制器 通过pin控制器的寄存器 我们可以配置一个或者一组引脚的功能和特性 在软件方面 Linux内核提供了pinctrl子系统 目的是为了统一各soc厂商的pin脚管
  • TreeView —WPF—MVVM—HierarchicalDataTemplate

    摘要 采用HierarchicalDataTemplate数据模板和treeview在MVVM模式下实现行政区划树 支持勾选 勾选父节点 子节点回全部自动勾选 子节点部分勾选时 父节点半勾选 子节点全部勾选时 父节点勾选 反之亦然 Hier
  • 吴恩达9.3 反向传播的直观理解

    为了更好地理解反向传播算法 我们再来仔细研究一下前向传播的原理 前向传播算法 反向传播算法做的是
  • Qt基础——UI文件.h文件说明

    首先 需要使用Qt Designer设计你的UI界面 Qt号称是跨平台应用程序和UI开发框架 所以其自带的UI设计器 即Qt Designer 功能也非常强大 除了通常用的如Button List等组件外面 使用Qt Designer做UI
  • mac出现wifi没有ip地址无法接入互联网

    问题 情况 wifi已经输入密码正确 但是中间出现灰色的wifi图标 还有一个叹号 说是没有IP地址 解决方法 1 试过重启 2 试过删掉该网络再重新输入密码 3 试过删掉WiFi一栏 来自百度 最佳答案 1 首先打开偏好设置 点击网络选项
  • 用Python赚钱的方法有哪些?

    很多人想知道用Python赚钱的方法有哪些 Python很容易使用 应用性较强 可以通过使用Python开发小程序 抓取数据 游戏开发 兼职编程老师 发展副业的方式来赚钱 文末有福利 用Python赚钱的方法 1 某宝搜python程序 可
  • java多线程设计模式

    1 I O处理比较花费时间 故把执行I O处理和非IO处理的线程分开 CPU执行速度很快 而内存的写入 读取很慢 所以有关CPU和内存交互会降低指令的速度 2 start方法运行有2个步骤 启动新的线程 运行new对象的run方法 3 所有