自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

程序员

先死后活,死去活来

  • 博客(13)
  • 资源 (22)
  • 收藏
  • 关注

原创 Java多线程 之 终结任务(十一)

ExecutorService.awaitTermination()等待每个任务结束,如果所有的任务在超时时间到达之前都结束了,则返回true,如果没有全部结束则返回false。这会导致每个任务都退出其run方法,并因此作为任务而终止。 这里要讨论的主题是:如果一个任务处于阻塞状态如何终止它?也就是说在run方法的中间如何终止它?中断被阻塞的任务可能需要清理资源。为了能够在run方法的中间终止任务

2016-06-29 16:47:29 1555

原创 Java多线程 之 临界区、ThreadLocal(十)

1.临界区临界区就是在同一时刻只能有一个任务访问的代码区。在java中通常使用下面的方式来实现:synchronized(syncObject) { //critical section}当然也可以使用Lock对象来实现临界区。 要访问临界区就要先获得syncObject这个对象的锁。注意,每个java对象都隐含有一把锁。 使用临界区的执行效率要比使用synchronized方法的执

2016-06-29 11:04:31 10854

原创 Java多线程 之 ThreadPoolExecutor(九)

最近在工作中遇到了ThreadPoolExecutor的使用,而且是由于它的配置不当导致了线上问题。下面对其进行简单介绍。 先看看ThreadPoolExecutor常用的构造方法: public ThreadPoolExecutor(int corePoolSize, int maximumPoolSize,

2016-06-28 12:20:11 971

原创 Java多线程 之 原子性与可见性(八)

1.原子性java中的原子性,是指:原子操作是不能被线程调度机制中断的;操作一旦开始,它一定会在可能发生的“上下文切换”(即切换到其他线程执行)之前执行完毕。 但是千万不要认为“原子操作不需要同步控制(这是错误的)”! 原子性可以应用于除long和double之外的基本类型的简单操作(赋值和返回值)。long和double这种64位的数据类型,在JVM内部是通过两条32位的操作完成的,因此有可能

2016-06-19 19:00:01 2809

原创 log4j的简单介绍

这里有一篇介绍log4j较为详细的博文,粗略看了下,下次再深入看看,写一个较为深入的介绍,先把连接记录在这里: log4j详细介绍 关于log4j的日志一直弄的不清不楚。这里总结总结:1. Demo示例在工程中经常看到类似这样的代码:private static final Log logger = LogFactory.getLog(XxxxClass.class);private stat

2016-06-19 13:51:46 17864

原创 Java多线程 之 访问共享资源synchronized、lock(七)

上一篇博文引出了资源竞争,并使用例子展示了资源竞争产生的结果(错误)。这篇博文给出解决方法。1. synchronized解决线程冲突的方案基本上都是:序列化访问共享资源。即当多个线程对共享资源同时访问时,对共享资源加锁访问。在Java中提供了synchronized关键字。 在java中,所有对象都自动含有单一的锁。也就是说,当一个任务调用某个对象上被synchronized标识的f()方法时,

2016-06-12 16:07:03 3514

原创 Java多线程 之 访问共享资源(六)

多线程产生问题的原因大多都是访问了共享资源。所谓共享资源就是只能被一个线程访问的内存对象(如变量、打印机、文件、输入输出端口等)。下面看一个《Thinking in java》第四版中给出的一个例子:package org.fan.learn.thread.share;import java.util.concurrent.ExecutorService;import java.util.con

2016-06-12 14:40:51 1186

原创 Java多线程 之 Thread子类 join方法(五)

1.thread前面都是使用Runnable接口定义任务,还可以使用Thread方式来定义。 最好不要在构造方法中启动线程。因为,另一个任务有可能在构造器结束之前开始执行,这意味着该任务能够访问处于不稳定状态的对象。因此,优选Executor而不是显示的创建Thread对象。package org.fan.learn.thread.ThreadTest;/** * Created by fan

2016-06-10 16:05:38 921

原创 Java多线程 之 后台线程(四)

java可以设置一个线程是否是后台线程。后台线程通常作为一种服务线程而存在,并不是程序不可或缺的一部分。当所有的非后台线程退出时,整个程序也就退出了,而且会关闭进程中的所有后台线程。所以,如果在后台线程中有finally语句,则不一定会执行。看下面的例子:package org.fan.learn.thread.deamon;import java.util.concurrent.Executor

2016-06-07 17:23:15 515

原创 daemontools的安装、简介

最近在工作中用到了daemontools工具来管理服务进程。这里总结一下。 当服务进程因为某些原因(包括kill)挂掉了,daemontools会重新启动这个进程。安装方法wget http://cr.yp.to/daemontools/daemontools-0.76.tar.gztar xvzf daemontools-0.76.tar.gzcd admin/daemontools-0.7

2016-06-04 17:36:16 14204

原创 Java多线程 之 Callable sleep yield 优先级(三)

1.Callable通过Runnable接口定义的任务其run方法没有返回值。要想获得返回值,需要通过Callable接口来定义任务,其call方法可以有返回值。而且,Callable任务只能通过 ExecutorService.submit方法来调用。submit方法会返回Future类型的对象,可以通过isDone方法来检查任务是否完成,通过get方法来获取任务的返回值。当然也可以不调用isDo

2016-06-02 21:44:04 2111

原创 Java多线程 之 执行器Executor(二)

java多线程很少像前面的例子那样直接使用Thread.start()方法来驱动。而是使用执行器Executor来管理线程。执行器是启动任务的最佳方法。 ExecutorService(一个具有服务生命周期的执行器)知道如何创建恰当的上下文来执行Runnable对象。请看下面的例子(其中LiftOff参见上一篇文章):package org.fan.learn.thread;import jav

2016-06-01 22:01:03 1024

原创 Java多线程 之 Runnable Thread (一)

最近看的东西有些乱。励志从XOA2看起、学起,发现需要看下thrift,看着看着thrift,发现需要学学NIO,学完了NIO温习温习前面看的thrift,却要休假10天。休假回来,感觉要学学多线程。多线程这厮,看《Thinking in java》第21章的前几个小节,这是第3次了。这次要坚持下来,并且记录下来。——勉之! 程序做的事情可以抽象成一个一个“任务”,任务是由线程来驱动的,线程是一个

2016-06-01 09:43:33 731

java反编译工具jd-gui

jd-gui java 反编译工具 将class文件反编译成java文件

2016-04-25

HexEditor插件

HexEditor插件 notePad++

2016-03-15

HexEditor.dll

notepad++查看二进制文件的插件

2016-03-15

junit-4.12.jar

用于写java测试单元的必须的jar包,从官网下的,肯定可用。

2015-07-13

junit-4.12

用于写java测试单元必要的jar包,这个是从官网下的,保证可用哦

2015-07-13

单链表 环 入口点 环长

求单链表是否有环,如果有环求出环的入口点及环长

2014-04-24

C51实现LCD1602

keil C51 实现LCD1602 保证能用 可以写字符串 可以写小数 main函数中有实例

2013-04-03

c51实现lcd1602四线驱动

51单片机 c51实现lcd1602四线驱动

2013-04-01

PL-2303 win7 驱动 usb RS232

PL-2303 win7 驱动 usb RS232 保证可以使用

2013-03-22

VC6.0 工具

VC6.0 工具 显示行号 智能提示 有使用说明及visual active 安装文件和破解文件

2013-01-27

keil uvision 3 注册机 带CID的

keil uvision 3 注册机 带CID的 CID=CSXRK-XZD85 LIC0=RC9U8-3AX1C-ZNSAE-CU1JS-SW7YD-VJD6F

2013-01-23

hex转coe工具

hex coe 51hex_bin corGenerator 在研究MC8051对ROM进行配置时需要coe文件,这里给出了使用keil写的流水灯的hex文件,并将其转换成了coe文件,此coe可以正常使用,并且给出了51hex_bin.exe和CoeGenerator.exe

2013-01-17

数据结构 严蔚敏 C语言版 链队列表示与实现

数据结构 严蔚敏 C语言版 链队列表示与实现 很给劲哦 绝对不会令您失望的。

2013-01-16

数据结构 严蔚敏 C语言版 行编辑程序

数据结构 严蔚敏 C语言版 行编辑程序 很给劲哦 绝对不会令您失望的。

2013-01-16

数据结构 严蔚敏 C语言版 汉诺塔

数据结构 严蔚敏 C语言版 汉诺塔 很给劲哦 绝对不会令您失望的。

2013-01-16

数据结构 严蔚敏 C语言版 数制转换

数据结构 严蔚敏 C语言版 数制转换 很给劲哦 绝对不会令您失望的。

2013-01-16

数据结构 严蔚敏 C语言版 循环队列

数据结构 严蔚敏 C语言版 循环队列 很给劲哦 绝对不会令您失望的。

2013-01-16

数据结构 严蔚敏 C语言版 顺序栈

数据结构 严蔚敏 C语言版 顺序栈 顺序栈的实现 很给劲哦 绝对不会令您失望的。

2013-01-16

数据结构 严蔚敏 C语言版 括号匹配

数据结构 严蔚敏 C语言版 括号匹配 while((c = getchar()) != EOF) { switch(c) { case '[': push(&sqSta;, c); break; case '(': push(&sqSta;, c); break; case ']': if(getTop(&sqSta;, &e)) { if(e == '[') { pop(&sqSta;, &temp;); } if(e == '(') { printf("\nnot match\n"); return ERROR; } } break; case ')': if(getTop(&sqSta;, &e)) { if(e == '(') { pop(&sqSta;, &temp;); } if(e == '[') { printf("\nnot match\n"); return ERROR; } } break; default : printf("\nerror\n"); return ERROR; break; } } if(stackEmpty(sqSta)) { printf("\nmatched\n"); } else { printf("\nnot matched\n"); }

2013-01-16

数据结构严蔚敏C语言版 迷宫

数据结构 严蔚敏 C语言版 迷宫 status mazePath(seqStack *S, posType start, posType end) { posType curPos; //current positon int curStep; //the ordinary number sElemType e; curPos = start; curStep = 1; do { if(pass(curPos)) //the current position is "accessed" { footPrint(curPos); e.ord = curStep; e.seat = curPos; e.di = 1; push(S, e); if(curPos.xPos == end.xPos && curPos.yPos == end.yPos) { return OK; //arrive at the final } curPos = nextPos(curPos, 1); curStep++; }//end of if(pass(curPos)) else //the current position is not "accessed" { if(!stackEmpty(*S)) //the stack is not empty { pop(S,&e); while(e.di == 4 && !stackEmpty(*S)) { markPrint(e.seat); //the current position must be marked by '#' pop(S,&e); }//end while if(e.di < 4) { e.di++; push(S,e); curPos = nextPos(e.seat, e.di); } }//end of if(!stackEmpty(*S)) }//end of else }while(!stackEmpty(*S)); }

2013-01-16

液晶显示12864驱动

液晶显示12864驱动适用于EasyArm1138

2012-12-04

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除