不积跬步,无以至千里


  • 首页

  • 标签

  • 分类

  • 归档

  • 搜索

浅谈Java多线程(二)

发表于 2012-07-21 | 分类于 后端 | | 阅读次数:

线程的协调

在Java多线程中,对于线程之间共享的实例资源,可以通过synchronized修饰符修饰其方法,实现线程之间的同步。另外,在多线程设计中,还需考虑到线程之间的协调。关于协调的一个典型设计模式便是Producer-Consumer(生产者-消费者)模式。

Producer-Consumer(生产者-消费者)模式

在这一模式中,存在Producer和Consumer两类线程,Producer线程用于生成Data(共享数据资源),而Consumer线程用于消费Data,在Producer和Consumer之间,存在对于Data生成和消费的协调,即当不存在Data时,Consumer线程需要等待Producer线程生成新的Data,而当Data过多时,Producer线程需要等待Consumer线程消费过多的Data。在Producer-Consumer模式中,引入了Channel(管道)类,负责Data在各线程之间的协调。Producer-Consumer模式的UML类图如下所示。
152350862

阅读全文 »

浅谈Java多线程(一)

发表于 2012-07-18 | 分类于 后端 | | 阅读次数:

Java支持多线程,可以通过继续Thread类或实现Runnable接口定义线程类,并在该类中重写run方法。
一个简单的Java线程类MyThread如下所示。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
package com.wt.testThread;  

public class MyThread extends Thread{
public void run()
{
int i = 0;
while (true)
{
i++;
System.out.println("MyThread Processing --> "+i);
try {
Thread.sleep(500);
} catch (InterruptedException e) {}
}
}

public static void main(String args[])
{
MyThread thread = new MyThread();
thread.start();
}
}

阅读全文 »

Java的类加载机制

发表于 2012-07-15 | 分类于 后端 | | 阅读次数:

Java包含两种基本的类加载器,分别是启动类加载器和用户自定义类加载器。启动类加载器负责加载核心Java API的class文件,而用户自定义类加载器负责加载其他class文件,如用于安装或下载标准扩展class文件的标准扩展类加载器,在类路径中发现类库class文件的类路径类加载器。

阅读全文 »

八皇后问题与回溯算法

发表于 2012-07-11 | 分类于 数据结构与算法 | | 阅读次数:

八皇后问题是在8*8的棋盘上放置8枚皇后,使得棋盘中每个纵向、横向、左上至右下斜向、右上至左下斜向均只有一枚皇后。八皇后的一个可行解如图所示:

234818981
234818981
234818981
234818981
234818981
234818981
234818981
234818981
阅读全文 »

Java笔试题

发表于 2012-06-23 | 分类于 后端 | | 阅读次数:
  1. OOP三特性
  2. Java中如何实现多继承
  3. Java对象生成过程
  4. HashTable和HashMap的区别
阅读全文 »

Java中对象的初始化生成过程

发表于 2012-06-22 | 分类于 后端 | | 阅读次数:

Java是面向对象的一种语言,在Java对象生成的过程,涉及子类和父类的加载、静态成员变量的初始化、子类和父类对象的初始化等过程,其具体过程通过下述代码来说明。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
class A 
{
public A(String s)
{
System.out.println(s+" Constructor A");
}
}

class B
{
public B(String s)
{
System.out.println(s+ " Constructor B");
}
}

class C
{
public C(String s)
{
System.out.println(s+ " Constructor C");
}
}

class Base
{
static A a1 = new A("a1: static");
A a2 = new A("a2: normal");
public Base()
{
A a3 = new A("a3: normal");
System.out.println("Constructor Base");
}
}

class Derived extends Base
{
static B b1 = new B("b1: static");
B b2 = new B("b2: normal");
public Derived()
{
B b3 = new B("b3: normal");
System.out.println("Constructor Derived");
}
}

public class Test {
static C c1 = new C("c1: static");
C c2 = new C("c2: normal");
public static void main(String[] args) {
C c3 = new C("c3: normal");
Derived derived = new Derived();
System.out.println("end");
}
}

阅读全文 »

1000瓶药,需要多少只小白鼠试验(二)

发表于 2012-06-17 | 分类于 数据结构与算法 | | 阅读次数:

1000瓶水,其中有一瓶有毒,小白鼠喝后24小时会死忙。请问最少多少只老鼠,可以在24小时测出哪瓶有毒。
答案:最少需要[log21000]=10只小白鼠

阅读全文 »

1000瓶药有1瓶有毒,需要多少只小白鼠才能试验找出

发表于 2012-06-17 | 分类于 数据结构与算法 | | 阅读次数:

1000瓶药有1瓶有毒,如果小白鼠服用有毒的药,则24小时后死亡。现在需设计一种策略,使用尽可能少的小白鼠,在24小时内找出有毒的药。

阅读全文 »

一道有关飞机绕赤道飞行的面试题

发表于 2012-06-12 | 分类于 数据结构与算法 | | 阅读次数:

假设赤道上有且仅有一座机场,并有若干架飞机,每架飞机的油量可保证飞半个赤道的距离。现在要求一架飞机从机场起飞,绕赤道一圈后,返回机场。在该飞机飞行过程中,不能中途降落、返回。其他飞机可返回,也可在空中给飞机加油,但不能降落,且必须返回机场。求飞机飞行和加油策略。

阅读全文 »

Lucene简介

发表于 2012-06-09 | 分类于 后端 | | 阅读次数:

Lucene是Apache基金会下的一个开源项目,提供能够实现全文索引和检索的Java API。Lucene包含索引引擎和检索引擎两部分。对于包含多个字段(Field)的文档(Document),可以通过Lucene的索引引擎对文档字段中的文本内容进行分词处理,构建关键字索引。当索引构建完成后,可以通过Lucene的检索引擎对特定字段进行基于关键字的查询。Lucene支持多种查询方式,包括模糊检索、分组查询等。对于查询结果,Lucene使用基于向量空间模型的排名算法计算得出查询结果的排名。

阅读全文 »

1…6789
magicwt

magicwt

89 日志
9 分类
49 标签
GitHub E-Mail
© 2018 magicwt
由 Hexo 强力驱动
|
主题 — NexT.Mist v5.1.4