`
frank-liu
  • 浏览: 1665612 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论
文章列表
简介         在java的多线程编程中,需要考虑的最多的情况莫过于线程之间的同步和通信了。在线程的同步机制中,最常用的莫过于synchronized和lock。从更深层次的比较来说,他们有什么特点呢?在开发的时候到底哪种方式比较合适?我们就详细的了解一下吧。 synchronized简介         一提起synchronized,似乎太简单了。在任何需要多线程访问的情况下,如果要对所访问的数据进行限制,保证每次只有一个线程可以操作该数据,我们可以在数据或者方法部分加一个synchronized。synchronized主要有两种使用的方式,一种是在一个方法内部用synchro ...
daemon线程的概念         在学习操作系统概念的时候,我们就曾听说过daemon的概念。daemon本身指的是在后台运行的进程或者线程,一般用来提供某些不需要与用户直接交互的服务,有点像我们见到的一些系统服务。在java线程中,一般可以分为两类,一类是普通的线程,就是那些我们通过常用的Thread类或者Runnable接口实现并启动的类。还有一类是daemon线程。这种线程也通过和创建普通线程同样的方式来创建,不过需要通过setDaemon方法设置为daemon线程。         daemon线程有几个典型的特征:         1. daemon线程是运行于后台的,不和 ...
引子         假定我们设想某一个场景,在一个工厂里我们需要经过一系列的工序要生产加工产品。这些生产工序在工厂中我们一般称之为流水线。这些流水线有一个比较有意思的特性,就是每一个步骤是针对生产过程中某一 ...
   因为经常要在ubuntu linux的环境下做一些开发工作。很多时候也牵涉到mysql相关的开发工作。于是就把整个过程做了一个整理,以方便以后再次安装配置的时候参考,也希望能够让新手少走点弯路。     其实当时要做的事情主要也就是以下几件,首先要在ubuntu的机器上装一个mysql server,然后需要配置特定的帐号和权限来执行一些sql脚本,创建一个包含有完整数据的环境。现在开始:   1. 安装         如果我们在没有安装mysql的ubuntu系统中输入如下的命令:mysql, 系统会给出如下的提示:     The program 'mysql' is ...
一个多线程的示例引发的问题 在讨论这个关键字之前先看一个多线程的示例代码:   public class RaceCondition { private static boolean done; public static void main(final String[] args) throws InterruptedException{ new Thread( new Ru ...
问题描述         给定(可能是负的)整数序列A1, A2,...,AN, 寻找(并标识)使Sum(Ak)(k >=i, k <= j)的值最大的序列。如果所有的整数都是负的,那么连续子序列的最大和是零。   对应的乘积问题则要求同样求出连续子序列中乘积最大的部分。   我们这里针对最大和与最大乘积的问题分别进行讨论。   最大和 最简单暴力的解法         这个问题有一个最简单直接的穷举解决法。我们看问题,既然要求里面最大的连续子序列。那么所有的连续子序列将由哪些组成呢?以数组的第一个元素为例,连续子序列必须是至少包含元素A1,也可能包含从A1到A2. ...
问题描述 在一个规模为N的数组A中,所谓的Majority元素就是指出现次数大于N/2的元素(因而最多只有一个这种元素)。比如数组 3, 3, 4, 2, 4, 4, 2, 4, 4 中间有Majority元素4。而数组3, 3, 4, 2, 4, 4, 2, 4则没有majority元素。需要一个算法,如果majority元素存在的话,就找出来,如果不存在,则给出报告。   下意识解法 通过这个问题,我们可以很快得出一个如下的方法。就是首先定义一个HashMap,里面存放数组里面的每个元素以及出现的次数。可以通过两个过程来做。         第一步是映射,将每个元素放进去,如果H ...

ant杂事整理

ant简单介绍       我们在平常的java开发过程中间,经常会处理一些这样的小任务,比如编译代码,运行测试代码,代码打包等。最常见的一些问题就是,如果用手工命令行来处理的话,需要敲很长的命令行,要在命令行里面指定各种参数。这样就很麻烦。如果用IDE来做呢,确实显得方便一点,可是不同的人拿到代码,用IDE打开,然后要来处理这些任务的时候,经常也需要配置classpath之类的各种路径。还是不够方便。总之,用命令行太啰嗦,用IDE则不够通用。还有,在某些特殊情况下,如果我们没有IDE,那该怎么办呢?别着急,我向您推荐自动化构建工具ant.     实际上我前面提到的问题基本上在编译型语言中 ...
早些时候曾经写过一篇关于observer pattern的文章,当时是基于.net平台的event特性理解做了一点解读。时过境迁,一下又过去三年多了。再回过头来看这些东西的时候,感觉当初的说法还是过于教条和书面化,内容的深度还是不够。 ...
一切从,那一段代码开始的      开始我们考虑这样一个问题,就是假定我们要写一个方法来遍历一个目录里所有的文件。因为目录里面可能还含有子目录,我们可能就需要用到循环,递归等这样的思路。一个典型的思路如下: ...
    最近正好学习了一点用java socket编程的东西。感觉整体的流程虽然不是很繁琐,但是也值得好好总结一下。 Socket     Socket可以说是一种针对网络的抽象,应用通过它可以来针对网络读写数据。就像通过一个文件的file handler就可以都写数据到存储设备上一样。根据TCP协议和UDP协议的不同,在网络编程方面就有面向两个协议的不同socket,一个是面向字节流的一个是面向报文的。      对socket的本身组成倒是比较好理解。既然是应用通过socket通信,肯定就有一个服务器端和一个客户端。所以它必然就包含有一个对应的IP地址。另外,在这个地址上server要 ...
Decorator之前 在Java程序中,我们常会在IO的时候用到类似于如下的代码:   InputStream in = new BufferedInputStream( new FileInputStream("test.txt"));   从代码本身的直观意义来说,这部分代码很好理解。 1.使用FileInputStream打开test.txt文件。使用BufferedInputStream类封装了这个类之后,返回的对象就具备了缓冲部分数据的功能。 2. 比较有意思的一点在于,虽然我们用Buffered ...
问题描述:     最近在网上看到一个有意思的问题,就是建立一个映射规则,比如说a-->c, x-->z, z-->b。也就是说,相当于将字母表中间所有字母映射到循环移位后两位的字母。通过这样的方式,将一个字符串解码。假设有这么一个字符串:“lmu ynnjw ml rfc spj”。如果我们要对它按照前面循环后移位两位的方式解码的话,解码的结果将是:“now apply on the url”.   问题分析:     这个问题总的来说,可以分为两个部分,一个是对单个字符进行解码,另外一个是遍历整个字符串,返回结果。先看看解码部分:     def decode ...

python中的iterator

Iterator 在python中我们常用到for语句,比较常见的有如:   for x in rang(5): print x,   返回的结果如下: 0 1 2 3 4  for语句可以使用的场景往往不仅仅局限于list中,还可以用到其他的地方,比如在Dict和一些字符串中间都可以遍历: # iterate through dict pc={"name":"mypc", "port": 80} for key in pc: print key, # result ...
疑惑之初: 记得初次编程的时候,看到书上说过当要想实现对某个对象进行迭代器访问的方式时,需要实现一些特定的接口。 比如说我们想用如下的一段代码:   for(ListItem item : itemSet) item.xxx();  那么我们就需要实现java ...
Global site tag (gtag.js) - Google Analytics