- 浏览: 18962 次
- 性别:
- 来自: 湖南常德
最新评论
一、什么是线程 每个java程序都至少有一个线程,在学习线程之前我们的大部分程序都是单线程的,程序从main开始执行,一次向下执行每条代码,要是执行的过程中遇到阻塞,程序就会停滞。基本上所有的操作系统都能同时运行多个任务,而通常每个任务就是一个程序,每个程序就是一个进程。当一个程序运行时,内部可能包含多个顺序执行流(基本上互补影响),我们把这样的每个顺序执行流叫线程。
二、线程和进程
一个任务通常包含一条进程。当每个程序进入内存运行时,即变成一个进程。进程是运行中的程序,特点;
独立性:进程是独立存在的,拥有独立的资源,如地址空间,内存等。
动态性:程序与进程的区别在于,程序是静态指令的集合,而进程是正在执行的指令集合
并发性:多个进程之间一般可以并发执行,多个进程之间不会互相干扰
线程是进程的做成部分,一个进程可以拥有多个线程,线程也被叫做轻量级的进程,线程是进程的执行单元。线程是独立运行的,和进程中的其他线程不互相影响,对于线程的执行是通过优先级来进行的,优先级相同的进程的执行是抢占式的,也就是说在优先级相同的情况下,任何一个正在执行过的线程都有可能被挂起,以能够执行其它的线程。
三、多线程的优点
由于进程都拥有独立的内存,而多个线程是共享内存的,可以提高极大的程序运行的效率。比如,一个浏览器必须能同时下载过个资源。
四、线程的创建和启动
1、继承Thread类创建线程
定义Thread类的子类,并重写该类的run()方法,该run()方法的方法体就是代表了线程需要执行的内容。我们经常把run()方法称为线程的执行体。创建Thread子类的对象,用线程对象的start()方法来启动线程
public class ThreadDemo extends Thread {
private String rootDirName;
// 主函数
public static void main(String[] args) {
// 得到系统根目录的个数
File[] dirFile = File.listRoots();
// 根据根目录的个数创建统计线程对象并启动
for (int i = 0; i < dirFile.length; i++) {
// 创建线程对象
ThreadDemo demo = new ThreadDemo(dirFile[i].getAbsolutePath());
demo.start();
try {
demo.sleep(2000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(dirFile[i].getAbsolutePath());
}
}
/**
* 统计某个磁盘文件数量的线程类
*
* @param root根目录的名字
*/
public ThreadDemo(String path) {
this.rootDirName = path;
}
/**
* 线程执行入口
*/
public void run() {
System.out.println("-------执行------->");
long start = System.currentTimeMillis();
int fileCount = countDir(rootDirName);
long time = System.currentTimeMillis();
}
/**
* 计算一个目录下所有文件的长度
*
* @param dir目录名
* @return 文件总长度
*/
public int countDir(String path) {
int count = 0;
File file = new File(path);
// 列出目录
File[] subFile = file.listFiles();
if (subFile == null || subFile.length == 0) {
return count;
}
for (int i = 0; i < subFile.length; i++) {
if (subFile[i].isDirectory()) {
count += countDir(subFile[i].getAbsolutePath());
}
if (subFile[i].isFile()) {
count++;
System.out.println(subFile[i].getAbsolutePath());
}
}
return count;
}
}
2、实现Runnable接口创建线程对象
定义Runnable接口的实现类,重写该类的run方法,该run方法的方法体同样是该线程的线程执行体,创建Runnable实现类的实例,并以此实例作为Thread类的传入参数创建Thread类对象,该Thread类对象才是真正的线程对象。
import java.lang.Runnable;
public class RunnableDemo implements Runnable {
private int i;
/**
* 构造方法
*/
public RunnableDemo(int i) {
this.i = i;
}
/**
* 主函数
*
* @param args
*/
public static void main(String[] args) {
for (int i = 0; i < 100; i++) {
// 实例化对象
RunnableDemo demo = new RunnableDemo(i);
Thread thread = new Thread(demo);
// 启动线程
thread.start();
// try {
// thread.sleep(2000);
// } catch (InterruptedException e) {
// e.printStackTrace();
// }
}
}
/**
* 实现Runnable抽象类的方法
*/
public void run() {
// 循环输出
while (true) {
long time = System.currentTimeMillis();
System.out.println(i+"号线程"+time);
}
}
}
3、以内部类的形式创建线程
可以在一个方法中创建线程,当方法被调用时线程启动
public void startMyThread() {
Runnable runner = new Runnable() {
public void run() {
while (true) {
try {
Thread.sleep(3000);
otherMethod(id);
} catch (Exception e) {
}
}
}
};
Thread thread = new Thread(runner);
thread.start();
}
private void otherMethod(int i) {
System.out.println("调用类中的其他方法" + i);
}
五、线程的应用
线程游戏:利用线程我们能够做些小游戏,我们小组选择的是放水果忍者
进入游戏
各个模式的游戏画面
- 山寨水果忍者.zip (10.5 KB)
- 下载次数: 0
发表评论
-
git入门
2015-02-11 11:02 0git入门 -
JVM内存结构浅谈
2013-05-19 14:47 698Java程序的运行过程: ... -
菜鸟入门之网页数据抓取
2013-05-04 21:53 5557有时候需要从网页上获取数据,比如别一些网页上的新闻获取到放 ... -
动态编译
2013-03-01 22:33 627前几天谈论了关于动 ... -
位映射
2013-03-01 22:33 947前些天讨论了位映射的内容,一个具体的例子就对于M个int ... -
线程同步
2013-03-01 22:34 7461,为什么要有线程同 ... -
生产消费模型
2013-03-01 22:34 722当遇到一个线程要产生数据而另一个线程要处理数据时,这就是生 ... -
设计模式之单例模式
2012-12-02 23:02 0单例模式又叫单台模式或者单例模式 -
数据结构之Hash
2012-11-19 21:45 884数据结构之hash 首先介绍两种非常重要的数据结构。数组,为 ... -
数据结构之Hash
2012-11-18 14:47 0数据结构之hash 首先介 ... -
网络通信总结
2012-10-28 15:33 857网络通信:一句话说,用网络传输数据(各种数据) 。进行通讯那 ... -
哈弗曼压缩
2012-08-03 11:43 705一、哈弗曼树,又称最优树,是一种带权路径长度最短的树。 ... -
链表总结
2012-08-03 11:43 807首先,链表是一种顺 ... -
树二叉树总结
2012-08-03 11:45 880一、数的相关 节点: 节点是树的基本组成单 ... -
java集合框架
2012-07-16 21:21 753java集合框架总结 主要由以下三部分组成: ... -
I/O体系结构总结
2012-07-16 21:22 922I/O体系结构总结 流的概念和分类: ... -
File相关类总结
2012-07-16 21:22 929File是java中的与文件相关的类,可以对进行创建、删 ... -
java异常机制
2012-07-11 13:01 728JAVA异常机制 一、异常的基本概念 简单的说 ... -
总结20120705
2012-07-05 10:07 690一、类与对象 1. ... -
java关键字总结
2012-05-20 13:31 749常用关键字: 访问修饰符关键字: public: 是最为公 ...
相关推荐
合理的线程数量和良好的同步策略是实现高性能多线程应用的关键。 总结,Windows环境下的多线程编程涉及了从线程创建、同步到通信的多个方面,理解和掌握这些原理与技术对于开发高效、稳定的应用至关重要。在实践中...
### 在C#中编写多线程应用程序 #### 引言 多线程是现代软件开发中的一个重要概念,尤其是在像C#这样的高级编程语言中。它允许程序同时执行多个任务,从而提高了应用程序的性能和响应性。本文将详细介绍如何在C#中...
### Java多线程编程总结 #### 一、Java线程:概念与原理 - **操作系统中线程和进程的概念** ...通过学习上述各个方面,我们可以更好地理解和利用Java的并发机制,从而开发出更高效、更稳定的多线程应用程序。
### 超线程技术的应用详解 #### 一、绪论 随着计算机技术的飞速发展,用户对计算性能的需求日益增长。无论是个人用户还是企业级应用,都期望获得更高效、更快捷的计算体验。然而,传统的通过提高CPU主频来提升性能...
Java多线程是Java编程语言中一个非常重要的概念,它允许开发者在一个程序中创建多个执行线程并行运行,以提高程序的执行效率和响应速度。...在实际开发中,正确地应用多线程机制可以显著提升程序的性能和用户体验。
MFC 多线程完整总结及示例代码 多线程是一种重要的编程技术,用于实现并行处理和提高系统性能。在 MFC 中,多线程编程可以通过 Win32 API 函数和 MFC 类库来实现。在本文中,我们将对多线程的基本概念、多线程编程...
在Windows应用程序开发中,MFC(Microsoft Foundation Classes)框架提供了对多线程的支持,使得开发者可以构建更加复杂的并发系统。...正确理解和使用这些特性,可以帮助开发者构建高效、稳定的多线程应用。
### 多线程应用程序设计 #### 实验背景与目的 多线程技术是现代软件开发中的重要组成部分,尤其是在嵌入式系统中,由于资源有限,合理利用多线程能够显著提升系统的性能和响应速度。本实验旨在通过具体的实践操作...
### Java多线程编程总结 #### 一、Java线程:概念与原理 1. **操作系统中线程和进程的概念** - 当前的操作系统通常为多任务操作系统,多线程是实现多任务的一种手段。 - **进程**:指内存中运行的应用程序,每个...
多线程允许程序同时执行多个任务,提高了系统资源的利用率,提升了应用程序的响应速度和并发性能。对于大型分布式系统、Web应用以及任何需要处理大量并发请求的服务来说,深入理解和熟练掌握Java多线程是必要的。 ...
理解并熟练运用这些Windows多线程编程的知识,能够帮助开发者构建高效、可靠的多线程应用,同时注意线程安全和资源管理,避免潜在的问题。在实际开发中,还需要结合具体的编程语言和库(如C++的Windows API或C#的...
Java多线程是Java编程语言中的一个重要特性,它允许开发者创建并发执行的多个线程,从而提高程序的执行效率和响应速度。...理解Java多线程的工作原理和API使用对于开发高性能、高响应的应用程序至关重要。
总结起来,无论是C语言还是Java,实现多线程都需要理解线程的创建、调度、同步和通信。通过合理利用线程,开发者可以编写出更高效、响应更快的应用程序,充分利用现代计算机的多核优势。在实际开发中,应根据需求...
【多线程精心总结】 在Java编程中,多线程是一种重要的并发处理方式,它可以提高程序的执行效率,尤其在处理大量...通过合理使用这些工具,开发者可以创建出既安全又高效的多线程应用,充分利用多核处理器的计算能力。
总结,Qt5的多线程机制是通过QThread类实现的,它允许开发者创建独立的工作线程来处理后台任务,从而保持主线程的流畅性。`WorkThread`是一个很好的实践示例,展示了如何在Qt中自定义线程类并实现线程间的通信。正确...
总结来说,多线程技术允许程序并行执行任务,提高效率;而委托则作为一种强大的工具,不仅用于在多线程环境中的方法调用,还为事件处理和回调提供了便利。在实际开发中,掌握这两项技术对于编写高性能、用户体验良好...
### 多线程应用程序设计知识点解析 #### 一、多线程程序设计基本原理 多线程编程是一种软件技术,允许在单个程序中并行执行多个任务或操作,从而提高程序的性能和响应能力。在多核处理器普及的今天,多线程编程...
### MFC多线程的创建详解 #### 一、MFC多线程概述 MFC (Microsoft Foundation Classes) 是微软为简化Windows程序开发提供的一套类库,...在实际应用中,合理地利用MFC的多线程机制可以大大提高程序的性能和用户体验。
本文从多线程的基础概念出发,深入探讨了Java中多线程的实现机制及线程安全问题,并介绍了几种常见的设计模式(包括单例模式、工厂模式和适配器模式),这些模式有助于解决多线程环境下的常见问题。通过对这些知识点...