`
rijin
  • 浏览: 139465 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论
文章列表
在应用里经常都有用到在后台跑定时任务的需求。举个例子,比如需要在服务后台跑一个定时任务来进行垃圾回收(译者注:个人觉得用定时任务来跑垃圾回收不是很好的例子,从译者接触到的项目来看,比较常见的是用定时任务来进行非实时计算,清除临时数据、文件等)。 在本文里,我会给大家介绍3种不同的实现方法: 普通thread实现 TimerTask实现 ScheduledExecutorService实现 普通thread 这是最常见的,创建一个thread,然后让它在while循环里一直运行着,通过sleep方法来达到定时任务的效果。这样可以快速简单的实现,代码如下:
本文写了我今年计划要做的5件事。为了能跟踪计划执行的进度,就把这些事都列了出来。我觉得这些事对其它Java开发者而言也是不错的参考方向。 1.开发一个应用,通过Java来操作一种NoSQL数据库实现存储 如果你还没接触过NoSQ ...
一、什么是线程 基础知识。线程是CPU调度的最小单元。一个线程可以看作是在执行一个任务。除创建和销毁,线程的生命周期还包括就绪、运行、阻塞。 二、多线程的工作原理 CPU是按时间片来运行任务的,多个线程都有机会获得时间片,这样多个任务就可以并发地执行。线程间的切换会涉及到上下文保存的开销。由于线程间共享进程内的数据资源,故线程切换的开销比进程切换的开销要小很多。在大多数通用的处理器中,上下文切换的开销相当于5000到10000个时钟周期。 因为大多时候一个线程不可能满负荷地占用CPU,会有一些IO或接口调用的操作,这个时候CPU是空闲的,就可以切换别的线程执行,从而大大地提高效率和并发 ...
前言:很喜欢节假日,可以睡个好觉,泡杯清茶,懒懒地躺沙发上放音乐看书,眼累了练练吉它唱唱歌,好像只有这个时候自己才完全属于自已。今天看了本《团队的五种机能障碍》,全书大部分内容以一个虚构而真实的故事讲 ...
死锁是指在程序里出现两个或两个以上的线程永远被堵塞住,出现这种情况的前提是至少有两个线程和两个或更多的公共资源。下面是我写的一个简单的会产生死锁现象的例子,我们来分析下它的原理:Java死锁例子 package com.journaldev.threads; public class ThreadDeadlock { public static void main(String[] args) throws InterruptedException { Object obj1 = new Object(); Object obj2 = ...
把一个无符号整数的比特位反转顺序。 有很多种方法来实现这个。我们这里给出一个算法:通过异或运算来交换,然后用分治方法来优化它。 提示: 你怎么把第i个和第j个位置的bit给交换了呢?如果你能用异或来实现,试着给出算法。 异或交换的小技巧: 如果一共有n个bit,反转它可以通过最少n/2次交换,最多n次交换来完成。技巧就在于实现一个交换函数swapBits(i,j),用来交换位置在i和j的两个bit。你应该还记得异或运算:0 ^ 0 == 0, 1 ^ 1 == 0, 0 ^ 1 == 1, 和 1 ^ 0 == 1。 我们只要在第i位和第j位的bit不同时交换就行了。我们用异或来 ...
当你要开始建立一个网站的时候,你通常第一反应想到的是设计,但紧接着就是要考虑到怎么用代码实现它的问题。想做出一个让用户眼前一亮且印象深刻的“现象级”网站是很难的,即使网页设计师设计出来了,但需要按照设 ...
大家都知道Fibonacci数列(一般译为斐波那契数列),比如:0, 1, 1, 2, 3, 5, 8, 13, 21...这是一个通过重复计算生成数列的好例子:f(n) = f(n-2) + f(n-1)。我们可以写一个计算第n个(从0开始)Fibonacci数的简单代码: public class Fibonacci { public int fib(int n) { if (n == 0 || n == 1) return n; System.out.println("calculating fib(" + ...
“带宽”这个词并不陌生,即使是非技术人员,普通的老百姓,也经常会提到,比如“我家换了10M带宽的光纤,速度嗷嗷的”,“谁在下载把带宽都占用了,视频看不了”。对于互联网行业的技术人员而言,在平时的网络调优、申请部署资源时,带宽也是个必不可少的参数。可是你真的知道带宽这个词所指的准确含义吗?   有些人从字面上的意思直观理解为带宽是类似于高速路的路面宽度。部分人知道带宽的单位是bits/s,即单位时间的比特数,所以理解为高速路上行驶的汽车的速度。这两种经常被“误解”的理解也没有太大的失误,反而对于“带宽”这个词的普及起了推动作用。但是如果做为一名关注性能的互联网从业人员而言,还是应该清楚其精确 ...
先声明:本文内容是偏向于应用开发的,分析解答过程不适用于纯算法研发岗位。   朋友小P近来参加某互联网公司的电话面试,被问到一道题:怎么判断两个集合是否相等?注意,这是面试官的原话,一字不多,一字不少。 ...
突然想起要写这个系列文章的起因是前阵子我内推了一大学同学,他面试完之后面试官对他扎实的基础、严谨的思维等优点非常满意,唯一可惜的是他之前没有过任何互联网行业的开发经验,最终难以达到该职位的要求。 我内推这位同学时对他是心里有数的,他在学校期间就很优秀,理论扎实动手能力也强,如果单论编程、算法、SQL、工具的使用等技能他是可以通过面试的。不过他毕业后一直做的是ERP系统开发,确实与互联网开发有出入。 我向他反馈完面试结果之后自己也在想:他所欠缺的互联网开发经验,是指哪些内容呢?我跟他其实正好相反,我毕业后一直就是在互联网公司做后台开发,反而是没有什么传统软件行业的工作经验(虽然大学里也选修 ...
原文同时还记录在笔者博客:http://www.newhottopic.com/2013/04/05/java-reference/ Java语言里的引用类似于C/C++语言里的指针,通过引用可以对堆中的对象进行操作。在Java语言中的引用机制里,有四种引用。 一、强引用 这是最常用最普遍的一种引用。一般而言,大多数情况下默认使用的引用就是强引用。比如当你在函数体中创建了一个对象,该对象被分配在堆中,那么通过对象的引用就可以对该对象进行操作。比如: StringBuffer str = new StringBuffer("not a hello world"); 如 ...
Global site tag (gtag.js) - Google Analytics