`
李媛媛liyuanyuan
  • 浏览: 15282 次
  • 性别: Icon_minigender_2
社区版块
存档分类
最新评论

线程小结

阅读更多
1.线程
每一个java程序中至少都有一个线程——主线程。当java程序运行时JVM会创建一个主线程,并在这个线程中调用主函数中的方法
线程分为单线程和多线程
单线程:顺序调用
例: ma(){
mb();
mc();
print(a);
}
mb(){
md();
print(b);
}
mc(){
print(c);
}

最后输出结果会按顺序输出

多线程:
同时执行多个方法
例 ma(){
Thread.start();mb();
Thread.start();mc();
Thread.start();md();
print(a);
}
mb(){
print(b);
}
mc(){
print(c);
}
md(){
print(d);
}

哪个方法先执行完是不一定的要看方法内容

2.线程与进程之间的区别
1.一个应用程序就是一个进程(进行中的应用程序),而线程是一个程序程序内部的多个运行单位。
2.多个进程内部的数据时独立的,进程中通信大多数是必须通过网络实现的。而线程中是共享的(同一进程中)。
3.线程本身的数据通常只有寄存器数据以及一个程序运行时使用的堆栈,所以线程切换的负担比进程切换的负担要小。

3.线程实现的方法
1.继承Thread类
2.实现Runnable接口
3.匿名内部类
/**
 * 统计米一个磁盘文件数量的线程类
 * @author Administrator
 *
 */

public class CountFileThread extends Thread{
	private String rootDirName;
	/**
	 * 构造器传入一个根目录名
	 * @param root
	 */
	public CountFileThread(String root){
		this.rootDirName = root;
	}
	//线程执行入口:调用线程对象的start方法后线程就从它的run方法开始独立执行
	public void run(){
		long start =System.currentTimeMillis();
		int fileCount = countDir(this.rootDirName);
		long timeCost=System.currentTimeMillis();
		System.out.println("-------驱动器:"+fileCount+"用时(单位:秒)"+timeCost/1000);
	}
	private int countDir(String dir){
		int count=0;//文件长度的变量
		File dirFile = new File(dir);
		if(!dirFile.exists()){//如果用户输入的目录不存在
			return count;
		}
		File[] subfile = dirFile.listFiles();
		if(subfile==null){//如果列表子文件不存在
			return count;
		}
		for(int i=0;i<subfile.length;i++){
			if(subfile[i].isDirectory()){
					count+=countDir(subfile[i].getAbsolutePath());
		}
			if(subfile[i].isFile()){
				count++;
				}
			}
		return count ;
	}
	

}

主函数中调用
public class MainCount {
	public static void main(String [] args){
		//取得系统的根目录个数
		File[] file =File.listRoots();
		for(int i=0;i<file.length;i++){
			//创建线程对象
			CountFileThread cf = new CountFileThread(file[i].getAbsolutePath());
			cf.start();
		}
		System.out.println(file.length+"个系统线程对象");
	}

}

继承接口:
public class RunnableTest implements Runnable{
	//程序启动类
	public static void main(String [] args){
		for(int t=100;t<1010;t++){
			RunnableTest rt = new RunnableTest(t);
			Thread thread = new Thread(rt);
			thread.start();
		}
	}
	/**
	 * 构造方法
	 */
	public RunnableTest(int id){
	this.id = id;
	}

	@Override
	public void run() {
		// 循环当前时间点
		while(true){
			long currentTime = System.currentTimeMillis();
			System.out.println(id+"号线程"+currentTime);
		}
		
	}
	private int id;

}

匿名内部类
	/**
		 * 匿名内部类
		 */
		ActionListener al = new ActionListener(){

			
			public void actionPerformed(ActionEvent e) {
				//得到动作命令值
				final String command =e.getActionCommand();
				/**
				 * 匿名内部线程
				 */
				Thread t= new Thread(){
					public void run(){
						//得到刚开始时的时间
						long start=System.currentTimeMillis();
						//如果动作命令值是统计时
						if(command.equals("统计")){
							jt.setText("");
						File fi =(File)jb.getSelectedItem();
						int count =Count(fi);
						System.out.println(fi.getName()+"文件个数"+count);
						 jt.append("\n"+count);
						}
						//如果动作命令值是全盘统计
						if(command.equals("全盘统计")){
							jt.setText("");
							int count =0;
							for(int i=0;i<file.length;i++){
								
								 count+= Count(file[i]);
								 System.out.println(file[i].getName()+"文件个数"+count);
								 
								 
							}
							jt.append("\n"+count);
						}
					}
				
				};
				t.start();
			
			}
			
		};
分享到:
评论

相关推荐

    Java多线程小结

    ### Java多线程小结 #### 一、多线程的概念与意义 多线程是Java编程中的一个重要概念,指的是程序在运行时可以同时执行多个线程的能力。它能够提高程序的性能,尤其是在多核处理器的环境下。多线程使得程序能够更...

    多线程小结

    根据提供的标题、描述以及部分上下文内容,我们可以总结并详细阐述关于C#中的多线程技术的相关知识点。 ### 多线程概述 在C#中,多线程是一种让程序能够同时执行多个任务的技术。这有助于提高应用程序的性能和响应...

    python进程与线程小结实例分析

    线程则是进程中的一个实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位。 在Python中,传统方式是使用单线程,即方法按顺序依次执行。这种单线程模型无法利用现代多核处理器的多核优势,...

    Java线程类小结(附思维导图)

    在Java编程语言中,线程是程序执行的基本单元,它允许程序并发地执行多个任务。本文将对Java线程类进行深入的总结,并通过思维导图帮助理解各个类之间的关系。我们将探讨`Thread`类、`Runnable`接口、线程的状态、...

    C++多线程编程入门小结.pdf

    根据给定文件信息,以下是对"C++多线程编程入门小结.pdf"文件内容的知识点说明: ### 知识点一:C++多线程编程基础 C++多线程编程是指在C++程序中同时执行多个线程,以利用现代处理器的多核能力,提高程序的执行...

    C++多线程编程入门小结

    ### C++多线程编程入门知识点详解 #### 一、线程与进程概念解析 - **进程**: 进程是程序执行的一个实例。在Win32环境下,每个进程都有一个4GB的地址空间,用于存储应用程序的代码和数据。进程本身不执行任何指令,...

    Visual Basic.NET线程参考手册

    3.5 端到端的示例 3.5.1 编写自己的线程安全包装器 3.5.2 数据库连接池 3.6 本章小结第4章 设计模式 4.1 应用程序中的多线程 4.2 STA线程模式 4.3 MTA线程模式 4.3.1 指定线程模式 4.3.2 设计线程应用程序 4.3.3 ...

    java应用程序中使用线程

    锁定排序 3.6 线程优先级 3.7 监控程序线程 3.8 在应用程序中加入线程 ...线程中的过时方法 3.12 DownloadFiles类 3.13 未捕捉的异常 3.14 自愿放弃处理器 3.15 并发工具 3.16 小结

    心得.rar心得.rar

    1. **Java线程小结**:这部分内容可能涉及多线程编程的基础知识,如线程的创建、同步机制(synchronized、Lock等)、并发工具类(Semaphore、CountDownLatch、CyclicBarrier等),以及线程安全问题和解决方案。...

    Linux编程技术-实验4 多线程编程.doc

    Linux多线程编程技术 本实验报告的主要内容是关于...五、疑难小结: 本实验中遇到的困难是对共享变量的使用和理解不够深入,对消费者和生产者代码的编写还不是太熟练。需要更多地查询资料和实践来提高自己的技术。

    操作系统-创建多线程-读者写者

    #### 小结 本文通过对一个简单的多线程程序的分析,介绍了如何在Windows环境中使用`CreateThread`函数创建线程,并简要探讨了生产者-消费者模式和读者写者问题。在实际开发中,还需要深入研究多线程同步机制,以确保...

    VC++多线程与网络

    #### 小结 掌握VC++下的多线程与网络编程技巧对于开发高性能、高并发的网络应用程序至关重要。通过深入理解进程与线程的概念,熟练运用`CreateProcess()`和`CreateThread()`等API,以及掌握Winsock网络编程技术,...

    突破JAVA万人面试,懂多线程者得天下.zip

    目录网盘文件永久链接 01课程安排av 02什么是并发和并行av ...08线程创建小结av 09线程生命周期avi 10.线程安全问题什么是线程安全avi 11线程安全同题问题分析avi 12线程安全问题线程安全问题演示avi ...............

    java线程详解

    八、线程同步小结 Java线程:线程的交互 Java线程:线程的调度-休眠 Java线程:volatile关键字 Java线程:新特征-线程池 一、固定大小的线程池 二、单任务线程池 三、可变尺寸的线程池 四、延迟连接池 五、...

    多线程编程一个简单示例轻松入门

    #### 小结 本文通过一个简单的示例介绍了多线程编程的基础知识及如何使用`CreateThread()`函数创建线程。通过这个示例,读者可以了解到线程的基本创建流程、参数传递方式以及如何与主线程进行交互。多线程编程是...

    Python程序设计:多线程爬虫.pptx

    ### 小结 理解进程与线程的概念,掌握Python的`threading`模块,以及如何在爬虫中运用多线程,是提高爬虫效率的关键。在编写多线程爬虫时,需要注意线程安全问题,合理利用锁和其他同步机制,以确保数据一致性。...

Global site tag (gtag.js) - Google Analytics