Java学习笔记(八)――java多线程(二)

2014-11-24 02:31:17 · 作者: · 浏览: 3
}
8 public void run(){
9 for(int i=0;i<3;i++){
10 System.out.println(Thread1+"多线程运行结果 "+i);
11 }
12 }
13 public static void main(String[] args){
14 ThreadTest2 maintest1=new ThreadTest2("我是A");
15 ThreadTest2 maintest2=new ThreadTest2("我是B");
16 Thread maintest4=new Thread(maintest1);
17 Thread maintest5=new Thread(maintest2);
18 maintest1.run();
19 maintest2.run();
20 System.out.println("..............我是分割线1........................");
21 maintest4.run();
22 maintest5.run();
23 System.out.println("..............我是分割线2........................");
24 maintest4.start();
25 maintest5.start();
26 }
27 }
复制代码
执行结果:(每一次执行的结果都是不一样的,这只是其中的某一种)
复制代码
1 我是A多线程运行结果 0
2 我是A多线程运行结果 1
3 我是A多线程运行结果 2
4 我是B多线程运行结果 0
5 我是B多线程运行结果 1
6 我是B多线程运行结果 2
7 ..............我是分割线1........................
8 我是A多线程运行结果 0
9 我是A多线程运行结果 1
10 我是A多线程运行结果 2
11 我是B多线程运行结果 0
12 我是B多线程运行结果 1
13 我是B多线程运行结果 2
14 ..............我是分割线2........................
15 我是B多线程运行结果 0
16 我是B多线程运行结果 1
17 我是B多线程运行结果 2
18 我是A多线程运行结果 0
19 我是A多线程运行结果 1
20 我是A多线程运行结果 2
复制代码
【代码分析】
1. run方法和start方法的区别:
java核心技术中有这样一段话:不要调用Thread类或Runnable对象的run方法。直接调用run方法,只会执行同一个线程中的任务,而不会启动新线程。应该调用Thread.start方法。这个方法将创建一个执行run方法的新线程。
2. 在上面第三段代码中,ThreadTest2类,Thread类和Runnerable接口都实现了run方法。
1)Runnerable接口实现run方法
复制代码
1 public
2 interface Runnable {
3 /**
4 * When an object implementing interface Runnable is used
5 * to create a thread, starting the thread causes the object's
6 * run method to be called in that separately executing
7 * thread.
8 *

9 * The general contract of the method run is that it may
10 * take any action whatsoever.
11 *
12 * @see java.lang.Thread#run()
13 */
14 public abstract void run();
15 }
复制代码
2)Thread类实现run方法。
1 public void run() {
2 if (target != null) {
3 target.run();
4 }
5 }
3)为什么要说这个?因为这个实现是使用了代理模式。
代理:一个角色代表别一个角色来完成某些特定的功能。
举个例子:大家都买过衣服,所以在买衣服的时候,一般有下面的角色:
购物者:我们一般是从代理商那里买衣服,我们并不和制造商进行交涉,我们不关心衣服是如何生产出来的。
代理商:代理商是从制造商那里拿衣服,并且代理商可以提供一些简单的服务,比如裁剪裤子等。
制造商:制造衣服,并且批发衣服给代理商。
我们从上面的行为中可以抽象出,一个行为就是卖衣服这个行为在代理商和制造商都有,如果购物者要买衣服,也需要以代理商和制造商卖衣服为前提。
从上面我们可以抽象出三个角色,并不是和上面对应的哈。
抽象主题角色:这个使我们可以抽象出来的角色。就是卖衣服这个行为。
代理主题角色:中间商。
实际被代理角色:制造商。
代码:
SellClothes.java(需要和接口名一样)
1 //抽象主题角色:买衣服
2 public interface SellClothes {
3 void sellClothes();
4 }
Middleman.java
复制代码
1 //代理主题角色:中间商
2 public class Middleman implements SellClothes{
3 private SellClothes t;
4 public Middleman(SellClothes t) {
5 super();
6 this.t = t;
7 }