java线程简单总结

[size=large]
线程简单总结:
a、线程的简单理解:程序中一个独立运行单位。有单线程和多线程之分;单线程就是我们平常用得比较多的调用、嵌套;而接下来就着重介绍多线程。

b、多线程:即多个程序同时进行,其数据互不干扰和影响;
这里还要介绍下进程:简单地说、一个程序就是一个进程;而线程是一个进程内部的多个运行单位。进程只能调用数据、而线程不仅可以调用数据而且还可以改变数据。
在单核CPU中、多线进程是通过时间的停顿来实现。

c、多线程的实现:其实现过程可分为以下方法:
1、继承Thread类实现继承:主要是在run方法中重写方法来编写线程要实现的调用。然后调用start()方法来启动线程;
例:
public class CountFileThread extends Thread{

	private String path;
	private int count;
	private String rootDirName;
	//用构造器接收传递的路径和计数器
	public CountFileThread(String path){
		this.rootDirName=path;
	}
	
	//调用线程对象的start()方法后、线程就从它的
	public void run(){
		//定义一个当前时间的计时变量
		long start=System.currentTimeMillis();
		//调用文件统计方法
		int fileCount=countDir(this.rootDirName);
		//定义一个变量,得到当前运行所花时间
		long timeCost=System.currentTimeMillis()-start;
		//输出文件个数
		System.out.println("磁盘"+this.rootDirName+"统计出的文件个数"+
		fileCount+"/n统计所花时间:"+timeCost);
	}
	/*
	 * path 所传递路径
	 * size 返回统计的文件个数
	 */
	public int countDir(String path){
		//用于统计文件个数
		int size=0;
		//先实例化一个文件对象
		File file=new File(path);
		//判断文件目录是否存在
		if(!file.exists()){
			return size;
		}
		//用数组将路径所在的文件存装
		File[] subFile=file.listFiles();
		//再进行判断列表子目录是否存在
		if(subFile==null){
			return size;
		}
		for(int i=0;i<subFile.length;i++){
			//判断此文件是目录还是文件
			if(subFile[i].isDirectory()){
				//如果是目录,则进行递归调用
				size+=countDir(subFile[i].getAbsolutePath());
			}
			//如果是文件,则进行直接相加
			else if(subFile[i].isFile()){
				size++;
			}
		}
		return size;
	}
}


2、实现Runnable接口创建线程:主要定义一个实现Runnable接口的类,实现run()方法、再将这个类的实例作为Thread的构造方法的参数,创建Thread类的实例;再启动线程。其接口主要区别是同时实现多个线程。
例:
// 实例化对象、是每个磁盘做为一个线程
		File[] file = File.listRoots();
		for (int i = 0; i < file.length; i++) {
			// 实例化对象
			RunnableCount run = new RunnableCount(file[i].getAbsolutePath(),
					i + 1);
			// 磁盘中统计出的文件个数
			// int count=run.countDir(file[i].getAbsolutePath());
			// 构造Thread对象
			Thread thread = new Thread(run);
			// 启动线程
			thread.start();

		}

3、以内部类的方式创建线程:即在一个方法中创建线程、当方法被调用时,线程即启用;此方法也能同时实现多个线程。
例:
*
	 *这个方法会启动一个匿名匿名内部类线程
	 */
	private void MyThread(final int i, final String path) {
	    //实例化Runnable接口对象
	    Runnable run=new Runnable(){
			public void run() {
	    		int count=countDir(path);
	    		System.out.println("第"+i+"个磁盘的文件总数是:"+count);
	    	}
	    };
	    //最后启用这个内部线程
	    Thread thread=new Thread(run);
	    thread.start();

[/size]

猜你喜欢

转载自glc.iteye.com/blog/1596920
今日推荐