并发编程--ThreadLocal 1. ThreadLocal : * 线程局部变量,是一种多个线程间并发访问变量的解决方案. * 与其使用synchronized等加锁的方式,ThreadLocal完成不提供锁,而是用空间换时间的手段,为每个线程提供变量的独立副本,以保证线程安全: * 从性能上来说:ThreadLocal不具有绝对的优势,在并发并不是很高的情况下,加锁的性能会更好:但作为一套完全与锁无关的线程安全的解决方案, 在高并发量或者竞争激励的场景,使用ThreadLocal可以在一…
什么是ThreadLocal ThreadLocal有点类似于Map类型的数据变量.ThreadLocal类型的变量每个线程都有自己的一个副本,某个线程对这个变量的修改不会影响其他线程副本的值.需要注意的是一个ThreadLocal变量,其中只能set一个值. ThreadLocal<String> localName = new ThreadLocal(); localName.set("name1"); String name = localName.get(); 在线…
上篇我们学习了shell中条件选择语句的用法.接下来本篇就来学习循环语句.在shell中,循环是通过for, while, until命令来实现的.下面就分别来看看吧. for for循环有两种形式: for-in语句 基本格式如下: for var in list do commands done list代表要循环的值,在每次循环的时候,会把当前的值赋值给var(变量名而已,随意定), 这样在循环体中就可以直接通过$var获取当前值了. 先来一个例子吧: #!/bin/bash for st…
一个最简单的Java程序有多少线程? 通过下面程序可以计算出当前程序的线程总数. import java.lang.management.ManagementFactory; import java.lang.management.ThreadInfo; public class MainTest { public static void main(String[] args) { // 计算方法1 ThreadGroup threadGroup = Thread.currentThread()…
如今,不会Linux的程序员都不意思说自己是程序员,而不会shell编程就不能说自己会Linux.说起来似乎shell编程很屌啊,然而不用担心,其实shell编程真的很简单. 背景 什么是shell编程 高大上的解释,往往让人摸不住头脑.一句话概括就是:shell编程就是对一堆Linux命令的逻辑化处理. 为什么要会shell编程 举个简单的例子,我们做javaweb开发的,在以前,如果要在本地将程序打包,然后部署到远程服务器(抛开现在的ci, 原始的方法), 我们以前的做法通常会经历如下几个步…
上篇我们学会了如何使用及定义变量.按照尿性,一般接下来就该学基本数据类型的运算了. 没错,本篇就仍是这么俗套的来讲讲这无聊但又必学的基本数据类型的运算了. 基本数据类型运算 操作符 符号 语义 描述 + 加 10+10,结果为20 - 减 10-3, 结果为7 * 乘 10*2,结果为20 / 除 10/3, 结果为3(取整数) % 求余 10%3, 结果为1 (取余数) == 判断是否相等 两数相等返回1,否则0 != 判断是否不等 两数不等返回1,否则0 > 大于 前者大于后者返回1,否则0…
通过前两篇文章,我们掌握了shell的一些基本写法和变量的使用,以及基本数据类型的运算.那么,本次就将要学习shell的结构化命令了,也就是我们其它编程语言中的条件选择语句及循环语句. 不过,在学习shell结构化命令的时候,我们又会发现它与其它编程的语言相比存在不小的区别.下面就开始看看吧: 条件选择 在条件选择语句中,主要包含以下几种写法: if-then语句 if command then commands fi 吃瓜群众表示一脸懵比:if语句后面接的是命令,我们其它编程语言中,这儿都是接…
通过前几篇文章的学习,我们学会了shell的基本语法.在linux的实际操作中,我们经常看到命令会有很多参数,例如:ls -al 等等,那么这个参数是怎么处理的呢? 接下来我们就来看看shell脚本对于用户输入参数的处理. 命令行参数处理 根据参数位置获取参数 bash shell可根据参数位置获取参数.通过 $1 到 $9 获取第1到第9个的命令行参数.$0为shell名.如果参数超过9个,那么就只能通过${}来获取了, 例如获取第10个参数,那么可以写为${10}. 示例一: #!/bin/…
闭锁相当于一扇门,在闭锁到达结束状态之前,这扇门一直是关闭着的,没有不论什么线程能够通过,当到达结束状态时.这扇门才会打开并容许全部线程通过.它能够使一个或多个线程等待一组事件发生. 闭锁状态包含一个计数器.初始化为一个正式,正数表示须要等待的事件数量. countDown方法递减计数器.表示一个事件已经发生,而await方法等待计数器到达0.表示等待的事件已经发生. CountDownLatch强调的是一个线程(或多个)须要等待另外的n个线程干完某件事情之后才干继续运行. 场景应用: 10个运…
写在前面 并发编程一直都存在,只不过过去的很长时间里,比较难以实现,随着互联网的发展,人口红利的释放,更加友好的支持并发编程已经成了主流编程语言的标配,而对于软件开发人员来说,没有玩过并发编程都会有点不好意思.本系列文章将会以C#语言为主,详细介绍并发编程. 什么是并发编程,其实很简单,并发编程就是在一台处理器上同时做多件事情,并发编程的目标就是充分利用处理器的每一个核,以达到最高的处理性能.举个例子,服务器在响应第一个请求的同时响应第二个请求. 并发编程的方向 多线程 线程是一个独立的运行单元…