一.不得不提的volatile volatile是个很老的关键字,几乎伴随着JDK的诞生而诞生,我们都知道这个关键字,但又不太清楚什么时候会使用它:我们在JDK及开源框架中随处可见这个关键字,但并发专家又往往建议我们远离它.比如Thread这个很基础的类,其中很重要的线程状态字段,就是用volatile来修饰,见代码 /* Java thread status for tools, * initialized to indicate thread 'not yet started' */   p…
一.不得不提的volatile volatile是个很老的关键字,几乎伴随着JDK的诞生而诞生,我们都知道这个关键字,但又不太清楚什么时候会使用它:我们在JDK及开源框架中随处可见这个关键字,但并发专家又往往建议我们远离它.比如Thread这个很基础的类,其中很重要的线程状态字段,就是用volatile来修饰,见代码 /* Java thread status for tools, * initialized to indicate thread 'not yet started' */   p…
synchronized关键字是JDK5之实现锁(包括互斥性和可见性)的唯一途径(volatile关键字能保证可见性,但不能保证互斥性,详细参见后文关于vloatile的详述章节),其在字节码上编译为monitorenter和monitorexit这样的JVM层次的原语(原语的意思是这个命令是原子执行的,中间不可中断,详细可查阅原语的概念,这里monitorenter和monitorexit是原语对,表明它们之间的代码段是原子执行的,所以保证了锁机制中的互斥性.如果反编译会发现同步函数的前面加上…
前言 这一系列多线程的文章,一方面是个人对Java现有的多线程机制的学习和记录,另一方面是希望能给不熟悉Java多线程机制.或有一定基础但理解还不够深的读者一个比较全面的介绍,旨在使读者对Java的多线程有一个递增.全面和较深刻的理解,所以在第一部分就集中介绍一些概念和原理,表面看来这些对多线程的使用没有太多关系,但理解这些概念/原理对理解多线程是至关重要的,因为Java的多线程并非是完全独自实现的,它依赖于操作系统命令.CPU机制,并且随着这些基础软硬件的发展而发展,所以请有意向对多线程全面理…
一.总线锁定和缓存一致性 这是两个操作系统层面的概念.随着多核时代的到来,并发操作已经成了很正常的现象,操作系统必须要有一些机制和原语,以保证某些基本操作的原子性.首先处理器需要保证读一个字节或写一个字节是无条件原子的,不存在读/写了一半被中断的情况(那样就会产生乱七八糟的值),但这还不够,在并发环境下,为了满足多线程的一致性,还必须提供更大范围原子性的操作,比如Compare And Swap操作(见后面CAS章节).操作系统有两种保证操作原子性的机制:总线锁定和缓存一致性. 我们知道,CPU…
沉淀再出发:再谈java的多线程机制 一.前言 自从我们学习了操作系统之后,对于其中的线程和进程就有了非常深刻的理解,但是,我们可能在C,C++语言之中尝试过这些机制,并且做过相应的实验,但是对于java的多线程机制以及其中延伸出来的很多概念和相应的实现方式一直都是模棱两可的,虽然后来在面试的时候可能恶补了一些这方面的知识,但是也只是当时记住了,或者了解了一些,等到以后就会变得越来越淡忘了,比如线程的实现方式有两三种,线程池的概念,线程的基本生命周期等等,以及关于线程之间的多并发引起的资源的抢占…
合集目录 Java多线程专题1: 并发与并行的基础概念 什么是多线程并发和并行? 并发: Concurrency 特指单核可以处理多任务, 这种机制主要实现于操作系统层面, 用于充分利用单CPU的性能, 时分复用同时处理多个任务 并行: Parallelism 特指使用多核处理单任务或多任务, 这种机制需要同时在操作系统层面和应用层面实现, 用于充分利用多核环境下多CPU的整体性能, 并行处理同一个任务或多个任务. 什么是线程安全问题? 线程安全问题, 就是多个线程同时访问共享的数据, 如果未合…
目录 C#多线程编程系列(二)- 线程基础 1.1 简介 1.2 创建线程 1.3 暂停线程 1.4 线程等待 1.5 终止线程 1.6 检测线程状态 1.7 线程优先级 1.8 前台线程和后台线程 1.9 向线程传递参数 1.10 C# Lock关键字的使用 1.11 使用Monitor类锁定资源 1.12 多线程中处理异常 参考书籍 笔者水平有限,如果错误欢迎各位批评指正! C#多线程编程系列(二)- 线程基础 1.1 简介 线程基础主要包括线程创建.挂起.等待和终止线程.关于更多的线程的底…
Python GUI之tkinter窗口视窗教程大集合(看这篇就够了) 一.前言 由于本篇文章较长,所以下面给出内容目录方便跳转阅读,当然也可以用博客页面最右侧的文章目录导航栏进行跳转查阅. 一.前言 二.Tkinter 是什么 三.Tkinter 控件详细介绍 1. Tkinter 模块元素简要说明 2. 常用窗口部件及简要说明: 四.动手实践学习 1. 创建主窗口及Label部件(标签)创建使用 2. Button窗口部件 3. Entry窗口部件 4. Text窗口部件 5. Listbo…
概述 MongoDB是目前非常流行的一种非关系型数据库,作为入门系列的第一篇本篇文章主要介绍Mongdb的基础概念知识包括命名规则.数据类型.功能以及安装等. 环境: OS:Windows Version:3.4 一.安装 1.下载解压 在官网下载对应操作系统版本的安装包,然后解压:我这里使用Windows环境安装测试. 2.在D盘创建Mongodb\data\db目录 3.初始化数据 最好先将bin目录加入到环境变量,否则要到命令目录下执行. mongod --dbpath D:\mongod…