??xml version="1.0" encoding="utf-8" standalone="yes"?>package com.test2;
2
3public class Demo2 {
4
5 /**
6 * @param args
7 */
8
9 public static int search(int[] arrays, int target) {
10
11 int start = 0;
12 int end = arrays.length - 1;
13 int pos;
14 while (start <= end) {
15 pos = (start + end) / 2;
16 if (arrays[pos] == target) {
17 return pos;
18 } else if (arrays[pos] > target) {// 如果数组中间的数大于目标Q则end的位|变成数l中间位|-Q的位置
19 end = pos - 1;
20 } else {
21 start = pos + 1;// 如果数组中间的数于目标Q则start的位|变成数l中间位|?Q的位置
22 }
23 }
24 return -1; // 若没有查扑ֈQ则q回Q1
25 }
26
27 public static void main(String[] args) {
28 int[] arrays = { 2, 3, 28, 39, 59, 288, 322, 324, 2323 };
29 System.out.println(search(arrays, 28));
30 System.out.println(search(arrays, 322));
31 System.out.println(search(arrays, 59));
32 System.out.println(search(arrays, 288));
33 }
34
35}
36
]]>
1、程序:一D静态的代码?/p>
2、进E:E序的一ơ动态执行过E,它对应从代码加蝲、执行到执行完毕的一个完整过E?/p>
3、进E也UCQ务,支持多个q程同时执行的OSpUCؓ(f)多进EOS或多dOS?/p>
二、进E与U程
在一个程序内部也可以实现多个dq发执行Q其中每个Q务称为线E?/p>
U程是比q程更小的执行单位,它是在一个进E中独立的控制流Q即E序内部的控制流?/p>
特点Q线E不能独立运行,必须依赖于进E,在进E中q行?/p>
每个E序臛_有一个线E称ZU程?/p>
单线E:只有一条线E的q程UCؓ(f)单线E?/p>
多线E:有不止一个线E的q程UCؓ(f)多线E?/p>
三、开启多U程的优点和~点
提高界面E序响应速度。通过使用U程Q可以将需要大量时间完成的程在后台启动单独的U程完成Q提高前台界面的相应速度?/p>
充分利用pȝ资源Q提高效率。通过在一个程序内部同时执行多个流E,可以充分利用CPU{系l资源,从而最大限度的发挥g的性能?/p>
当程序中的线E数量比较多Ӟpȝ花费大量的旉q行U程的切换,q反而会降低E序的执行效率。但是,相对于优势来_劣势q是很有限的Q所以现在的目开发中Q多U程~程技术得Cq泛的应用?/p>
一、在实现U程~程Ӟ首先需要让一个类具备多线E的能力Q承ThreadcL实现Runnable接口的类具备多线E的能力Q然后创建线E对象,调用对应的启动线E方法即可实现线E编E?/p>
在一个程序中可以实现多个U程Q多U程~程指在同一个程序中启动了两个或两个以上的线E?/p>
在实际实现线E时QJava语言提供了三U实现方式:
Q?Q承Threadc?/p>
Q?Q实现Runnable接口
Q?Q用Timer和TimerTaskl合
二、承ThreadU程cd现多U程
java.lang包中提供了一个专门的U程c(ThreadQ,在该cM装了许多对U程q行调度和处理的Ҏ(gu)。如果一个类l承了Threadc,则该cd具备了多U程的能力,可以多线E的方式执行?/p>
U程的特性:随机性,pȝ在执行多U程E序时只保证U程是交替执行的Q至于哪个线E先执行哪个U程后执行,则无法获得保证,需要书写专门的代码才可以保证执行的序?/p>
对于同一个线E类Q也可以启动多个U程
同一个线E不能启动两ơ,
当自定义U程中的runҎ(gu)执行完成以后Q则自定义线E自然死亡。而对于系l线E来_只有当mainҎ(gu)执行l束Q而且启动的其它线E都l束以后Q才会结束。当pȝU程执行l束以后Q程序的执行才真正结束?/p>
三?实现Runable接口
a) 多线E对象实现java.lang.Runnable接口q且在该cM重写Runnable接口的runҎ(gu)?/p>
b) 好处Q实现Runable接口的方法避免了单承的局限性?/p>
?Q用实现Runable接口的方式实现多U程?/p>
一、线E的生命周期
U程是一个动态执行的q程Q它也有一个从产生到死亡的q程Q这是所谓的生命周期。一个线E在它的生命周期内有5U状态:
1、新建(new ThreadQ?/p>
当创建Threadcȝ一个实例(对象Q时Q此U程q入新徏状态(未被启动Q?br /> 例如QThread t1=new Thread();
2、就l(runnableQ?/p>
U程已经被启动,正在{待被分配给CPU旉片,也就是说此时U程正在qA队列中排队等候得到CPU资源。例如:t1.start();
3、运行(runningQ?/p>
U程获得CPU资源正在执行dQrun()Ҏ(gu)Q,此时除非此线E自动放弃CPU资源或者有优先U更高的U程q入Q线E将一直运行到l束?/p>
4、死亡(deadQ?/p>
当线E执行完毕或被其它线E杀死,U程p入死亡状态,q时U程不可能再q入qA状态等待执行?/p>
自然l止Q正常运行run()Ҏ(gu)后终?/p>
异常l止Q调用stop()Ҏ(gu)让一个线E终止运?/p>
5、堵塞(blockedQ?/p>
׃某种原因D正在q行的线E让出CPUq暂停自q执行Q即q入堵塞状态?/p>
正在睡眠Q用sleep(long t) Ҏ(gu)可ɾU程q入睡眠方式。一个睡眠着的线E在指定的时间过dq入qA状态?/p>
正在{待Q调用wait()Ҏ(gu)。(调用motify()Ҏ(gu)回到qA状态)
被另一个线E所dQ调用suspend()Ҏ(gu)。(调用resume()Ҏ(gu)恢复Q?/p>