线程通信(如 线程执行先后顺序,获取某个线程执行的结果等)有多种方式: 文件共享 线程1 --写入--> 文件 < --读取-- 线程2 网络共享 变量共享 线程1 --写入--> 主内存共享变量 < --读取-- 线程2 jdk提供的线程协调API suspend/resume wait/notify park/unpark. 线程协作 - JDK API 线程协作的典型场景:生产者-消费者 模型(线程阻塞.线程唤醒)如:线程1去卖包子,没有包子,则不再执行,线程2生产包子,通知…
在了解JDK提供的线程原子性操作工具类之前,我们应该先知道什么是原子性:在多线程并发的条件下,对于变量的操作是线程安全的,不会受到其他线程的干扰.接下来我们就学习JDK中线程的原子性操作. 一.CAS原理 说道原子性,不得不提的就是CAS原理: 使用锁时,线程获取锁是一种悲观锁策略,即假设每一次执行临界区代码都会产生冲突,所以当前线程获取到锁的时候同时也会阻塞其他线程获取该锁.而CAS操作(又称为无锁操作)是一种乐观锁策略,它假设所有线程访问共享资源的时候不会出现冲突,既然不会出现冲突自然而然就…
一丶什么是线程池 (1)博主在听到线程池三个字的时候第一个想法就是数据库连接池,回忆一下,我们在学JavaWeb的时候怎么理解数据库连接池的,数据库创建连接和关闭连接是一个比较耗费资源的事情,对于那些数量多且时间短暂的任务,会导致频繁获取和释放连接,这样使得处理事务的效率大大降低,多以我们创建一个连接池,里面放了指定数目的连接,当应用需要数据库连接的时候去里面获取,使用完毕后再放到连接池里,这样就避免了重复的获取连接和释放连接,至于要获取什么样的连接池我们可以根据应用的特征,设置参数来决定. (…
1.使用LockSupport的part/unpark实现 package com.ares.thread; import java.util.concurrent.locks.LockSupport; public class WaitAndNotifyDemo { public static void main(String[] args) { MThread myThread = new MThread(Thread.currentThread()); myThread.start();…
一.ThreadLocal ThreadLocal类用于隔离多线程中使用的对象,为ThreadLocal类中传递的泛型就是要隔离的对象,简单的来说:如果我们在主线程创建了一个对象,并且需要给下面的多线程任务都传递这个对象,那么如果这个对象传递到ThreadLocal,那么每个线程获取的对象都是独立的,不会受其他线程的改变而改变. ThreadLocal中一共有三个常用方法: get()方法:获取与当前线程关联的ThreadLocal值. set(T value)方法:设置与当前线程关联的Thre…
JDK提供的几种线程池 newFixedThreadPool创建一个指定工作线程数量的线程池.每当提交一个任务就创建一个工作线程,如果工作线程数量达到线程池初始的最大数,则将提交的任务存入到池队列中. newCachedThreadPool创建一个可缓存的线程池.这种类型的线程池特点是: 1).工作线程的创建数量几乎没有限制(其实也有限制的,数目为Interger. MAX_VALUE), 这样可灵活的往线程池中添加线程. 2).如果长时间没有往线程池中提交任务,即如果工作线程空闲了指定的时间(…
对javaSE中JDK提供的四种线程池稍作整理   一.Executor   package java.util.concurrent; /** * @since 1.5 * @author Doug Lea */ public interface Executor { /** * Executes the given command at some time in the future. The command * may execute in a new thread, in a poole…
文档原始地址    目录 线程池概述 线程池对象 回调环境对象 工作对象 等待对象 计时器对象 I/O 完成对象 使用清理组简化清理 回调实例 API    随着 Windows Vista® 的发布和 Windows Server® 2008 的即将问世,Microsoft 为托管应用程序的开发人员提供了改进的 Windows® 平台,它包含多种新技术,使得令原本 Windows 开发人员从中受益的改进能被广为利用.例如,自从 Windows 2000 发布以来,已是该平台组成部分的线程池组件…
线程操作API 1.currentThread 2.getId() .getName().getPriority().getStart.isAlive().isDaemon().isInterrupted() 3.setPriority(). 4.setDaemon(). 5.sleep(). 6.yield(). 7.join(). 8.interrupt() -------------------------------------------------------------------…
原文出处: 成熟的毛毛虫的博客 BASE64 编码是一种常用的字符编码,在很多地方都会用到.但base64不是安全领域下的加密解密算法.能起到安全作用的效果很差,而且很容易破解,他核心作用应该是传输数据的正确性,有些网关或系统只能使用ASCII字符.Base64就是用来将非ASCII字符的数据转换成ASCII字符的一种方法,而且base64特别适合在http,mime协议下快速传输数据. JDK里面实现Base64的API 在JDK1.6之前,JDK核心类一直没有Base64的实现类,有人建议用…
转自:http://blog.csdn.net/aaronychen/article/details/3928479 Linux下USB suspend/resume源码分析 Author:aaron   本文主要从自己开发的一个USB驱动的例子来深入讲解linux内核是如何支持USB设备的休眠和唤醒的, 最近我在为我们公司的一个模块写linux下的驱动, 其中之一就是要支持USB的休眠唤醒问题, 实际上linux内核对USB的这个功能的支持还是比较新的, 也就是最近几年的事. 一  打开/关闭…
Android中Linux suspend/resume流程首先我们从linux kernel 的suspend说起,不管你是使用echo mem > /sys/power/state 或者使用你的开发板已经拥有的power key 都可以实现系统进入suspend的功能,这是suspend的基础,即控制系统使suspend得到执行的机会,这里相信大家都可以理解,不再过多说明. 那么suspend得到了执行的机会又是怎么一步一步开始往下执行的呢?现在就开始我们的系统的电源管理之旅: 我们就通过e…
Postman 是一个非常棒的Chrome扩展,提供功能强大的API & HTTP 请求调试   需要FQ才能安装,使用时应该不用FQ了,除非使用postman的历史记录功能:   非常棒的Chrome扩展,用于API & HTTP 请求调试:Postman   Postman 是一个非常棒的Chrome扩展,提供功能强大的API & HTTP 请求调试. 它能够发送任何类型的HTTP requests (GET, HEAD, POST, PUT..),附带任何数量的参数+ hea…
POSIX线程库 与线程有关的函数构成了一个完整的系列,绝大多数函数的名字都是以"pthread_"开头,要使用这些函数库,要通过引入头文<pthread.h>,而且链接这些线程函数库时要使用编译器命令的"-lpthread"选项[Ubuntu系列系统需要添加的是"-pthread"选项而不是"-lpthread",如Ubuntu 14.04版本,深度Ubuntu等] 1.pthread_create int pt…
并行扩展库相当有用,因为它允许使用更高级的抽象——任务,而不必直接和线程打交道.但有的时候,要处理的代码是在TPL和PLINQ问世(.NET4.0)之前写的.也有可能某个编程问题不能直接使用它们解决,因此仍然要直接操纵线程的API. (1) (2) (3) (4) (5)…
package chapter7; /* * jdk提供的扩容方法 * System.arraycopy */public class TestArrayjdk { public static void main(String[] args) { // 定义数组 int[] a = { 2, 8, 6, 5, 3 }; // 定义一个扩容数组 int[] b = new int[a.length]; // 用jdk提供的方法存储数组 /* * 第一个参数:Object src: 原数组---a…
01_帮助文档的制作和使用 制作说明书的流程 如何制作一个说明书呢? A:写一个工具类 B:对这个类加入文档注释 怎么加呢? 加些什么东西呢? C:用工具解析文档注释 javadoc工具 D:格式 javadoc -d 目录 -author -version ArrayTool.java 目录:就可以写一个文件夹的路径 制作帮助文档出错: 找不到可以文档化的公共或受保护的类:告诉我们类的权限不够----工具类前面要加public 写一个工具类,对这个类加入文档注释 /** * 这是针对数组进行操…
转自:http://blog.csdn.net/njuitjf/article/details/18317149 Linux kernel suspend resume学习:2.6.35与3.0.35比较 最近在学习linux kernel中suspend和resume的处理.只是一味的看代码,有点枯燥,刚好有两个项目使用了不同的内核版本,就以比较这两个间的处理差别为线索进行学习.由于列举了很多代码,为了保持连续性,整篇文章还是放到了一个blog中. 首先看看公开出去的接口,都是文件/sys/p…
转自:http://blog.csdn.net/jacobywu/article/details/24735521 目录(?)[-] Question Answer 加boot 參數 no_console_suspend initcall_debug suspend_test wakelock power0 earlysuspend suspendresume 時間 fine tune   Question: 如何在Linux 或 Android下得到足夠的information,來做Power…
腾讯人工智能AI开放平台上提供了很多免费的人工智能API,开发人员只需要一个QQ号就可以登录进去使用. 腾讯人工智能AI开放平台的地址:https://ai.qq.com/ 里面的好东西很多,以自然语言处理的人工智能API为例. 假设我们有一个句子:腾讯AI人工智能开放平台.我们希望用腾讯的人工智能开放平台里提供的自然语言处理API对这个句子进行智能分词. 用您的QQ号登录腾讯人工智能开放平台,创建一个新的应用: https://ai.qq.com/ 根据您的实际需要选择自然语言处理的具体类别:…
ASP.NET MVC 提供与访问 Web Api 一.提供一个 Web Api 新建一个项目,类型就选 "Web Api".我用的是MVC5,结果生成的项目一大堆东西,还编译不过,真操蛋.用nuget装了好一阵才跑通.我估计MVC Web项目也可以的,甚至Web Form应该都行. 下面是一个Action.主要是想返回json数据. public ContentResult GetUser() { return new ContentResult { ContentEncoding…
大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是i.MXRT1050/1020/1015系列ROM中的FlexSPI驱动API使用. 今天痞子衡去4S店给爱车做保养了,保养一次要等两小时,闲来无聊就写了这篇文章打发时间,正好痞子衡技术交流群里有朋友也在问这个主题,急人所急是痞子衡的一大特质(此处请允许我装一下). 本篇是 <利用i.MXRT1xxx系列ROM提供的FlexSPI driver API可轻松IAP> 的续集,上篇文章基本上把ROM API原理及使用讲得很透彻了,但…
JDK自带线程池 线程池的状态 线程有如下状态 RUNNING状态:Accept new tasks and process queued tasks SHUTDOWN状态:Don't accept new tasks, but process queued tasks STOP状态: Don't accept new tasks, don't process queued tasks, and interrupt in-progress tasks TIDYING状态:All tasks ha…
1.yield() 该方法与sleep()类似,只是不能由用户指定暂停多长时间,并且yield()方法只能让同优先级的线程有执行的机会. 2.wait()和notify().notifyAll() 这三个方法用于协调多个线程对共享数据的存取,所以必须在synchronized语句块内使用.synchronized关键字用于保护共享数据,阻止其他线程对共享数据的存取,但是这样程序的流程就很不灵活了,如何才能在当前线程还没退出synchronized数据块时让其他线程也有机会访问共享数据呢?此时就用…
前言 今天简单的讲一讲线程中sleep(),join(),yield(),wait(),notify(),notifyAll()这些方法的使用以及区别. 不过在讲这些方法之前,需要简单的介绍一下锁池和等待池的概念. 专栏推荐: 并发编程专栏 锁池和等待池 1.锁池 所有需要竞争同步锁的线程都会放在锁池当中,比如当前对象的锁已经被其中一个线程得到,则其他线程需要在这个锁池进行等待,当前面的线程释放同步锁后锁池中的线程去竞争同步锁,当某个线程得到后会进入就绪队列进行等待cpu资源分配. 2.等待池…
一.前言 在多线程的场景下,我们会经常使用加锁,来保证线程安全.如果锁用的不好,就会陷入死锁,我们以前可以使用Object的wait/notify来解决死锁问题.也可以使用Condition的await/signal来解决,当然最优还是LockSupport的park/unpark.他们都是解决线程等待和唤醒的.下面来说说具体的优缺点和例子证明一下. 二.wait/notify的使用 1. 代码演示 public class JUC { static Object lock = new Obje…
java线程中的sleep/wait/notify/yield/interrupt方法 sleep 该方法能够使当前线程休眠一段时间 休眠期间,不释放锁 休眠时间结束之后,进入可执行状态,加入到线程就绪队列中,并不会立即执行 调用的时候,必须捕获异常 来自Thread的静态方法,只作用于当前线程 单位毫秒 wait 该方法能干是当前线程休眠一段时间 休眠期间,释放锁 休眠时间结束之后,立即执行 调用的时候无需捕获异常 来自Object类的方法,一旦调用 单位毫秒 调用wait()方法进入休眠之后…
线程间协作:wait.notify.notifyAll 在 Java 中,可以通过配合调用 Object 对象的 wait() 方法和 notify()方法或 notifyAll() 方法来实现线程间的通信.在线程中调用 wait() 方法,将阻塞等待其他线程的通知(其他线程调用 notify() 方法或 notifyAll() 方法),在线程中调用 notify() 方法或 notifyAll() 方法,将通知其他线程从 wait() 方法处返回. Object 是所有类的超类,它有 5 个方…
基础知识 首先我们需要知道,这几个都是Object对象的方法.换言之,Java中所有的对象都有这些方法. public final native void notify(); public final native void notifyAll(); public final native void wait(long timeout) throws InterruptedException; public final void wait() throws InterruptedExceptio…
为了解决对共享存储区的访问冲突,Java 引入了同步机制,现在让我们来考察多个线程对共享资源的访问,显然同步机制已经不够了,因为在任意时刻所要求的资源不一定已经准备好了被访问,反过来,同一时刻准备好了的资源也可能不止一个.为了解决这种情况下的访问控制问题,Java 引入了对阻塞机制的支持.      阻塞指的是暂停一个线程的执行以等待某个条件发生(如某资源就绪),学过操作系统的同学对它一定已经很熟悉了.Java 提供了大量方法来支持阻塞,下面让我们逐一分析.      1. sleep() 方法…