`
raidyue
  • 浏览: 18962 次
  • 性别: Icon_minigender_1
  • 来自: 湖南常德
社区版块
存档分类
最新评论

线程及线程应用总结

阅读更多

 

一、什么是线程     每个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);

         }

        

五、线程的应用    

                   线程游戏:利用线程我们能够做些小游戏,我们小组选择的是放水果忍者

进入游戏

游戏界面

 

各个模式的游戏画面

 

游戏

 

游戏

 

游戏

分享到:
评论

相关推荐

    windows环境下的多线程编程原理与应用

    合理的线程数量和良好的同步策略是实现高性能多线程应用的关键。 总结,Windows环境下的多线程编程涉及了从线程创建、同步到通信的多个方面,理解和掌握这些原理与技术对于开发高效、稳定的应用至关重要。在实践中...

    在C#中编写多线程应用程序

    ### 在C#中编写多线程应用程序 #### 引言 多线程是现代软件开发中的一个重要概念,尤其是在像C#这样的高级编程语言中。它允许程序同时执行多个任务,从而提高了应用程序的性能和响应性。本文将详细介绍如何在C#中...

    java多线程编程总结

    ### Java多线程编程总结 #### 一、Java线程:概念与原理 - **操作系统中线程和进程的概念** ...通过学习上述各个方面,我们可以更好地理解和利用Java的并发机制,从而开发出更高效、更稳定的多线程应用程序。

    超线程技术den应用

    ### 超线程技术的应用详解 #### 一、绪论 随着计算机技术的飞速发展,用户对计算性能的需求日益增长。无论是个人用户还是企业级应用,都期望获得更高效、更快捷的计算体验。然而,传统的通过提高CPU主频来提升性能...

    Java多线程知识点总结

    Java多线程是Java编程语言中一个非常重要的概念,它允许开发者在一个程序中创建多个执行线程并行运行,以提高程序的执行效率和响应速度。...在实际开发中,正确地应用多线程机制可以显著提升程序的性能和用户体验。

    MFC多线程完整总结及示例代码

    MFC 多线程完整总结及示例代码 多线程是一种重要的编程技术,用于实现并行处理和提高系统性能。在 MFC 中,多线程编程可以通过 Win32 API 函数和 MFC 类库来实现。在本文中,我们将对多线程的基本概念、多线程编程...

    MFC 多线程总结

    在Windows应用程序开发中,MFC(Microsoft Foundation Classes)框架提供了对多线程的支持,使得开发者可以构建更加复杂的并发系统。...正确理解和使用这些特性,可以帮助开发者构建高效、稳定的多线程应用。

    多线程应用程序设计

    ### 多线程应用程序设计 #### 实验背景与目的 多线程技术是现代软件开发中的重要组成部分,尤其是在嵌入式系统中,由于资源有限,合理利用多线程能够显著提升系统的性能和响应速度。本实验旨在通过具体的实践操作...

    Java多线程编程总结

    ### Java多线程编程总结 #### 一、Java线程:概念与原理 1. **操作系统中线程和进程的概念** - 当前的操作系统通常为多任务操作系统,多线程是实现多任务的一种手段。 - **进程**:指内存中运行的应用程序,每个...

    Java多线程的总结

    多线程允许程序同时执行多个任务,提高了系统资源的利用率,提升了应用程序的响应速度和并发性能。对于大型分布式系统、Web应用以及任何需要处理大量并发请求的服务来说,深入理解和熟练掌握Java多线程是必要的。 ...

    windows多线程总结

    理解并熟练运用这些Windows多线程编程的知识,能够帮助开发者构建高效、可靠的多线程应用,同时注意线程安全和资源管理,避免潜在的问题。在实际开发中,还需要结合具体的编程语言和库(如C++的Windows API或C#的...

    java多线程总结(一)

    Java多线程是Java编程语言中的一个重要特性,它允许开发者创建并发执行的多个线程,从而提高程序的执行效率和响应速度。...理解Java多线程的工作原理和API使用对于开发高性能、高响应的应用程序至关重要。

    理解多线程,写一个多线程应用程序,要求能在用户级实现线程的调度,如启动、挂起、恢复、停止,的C thread、java thread实现。

    总结起来,无论是C语言还是Java,实现多线程都需要理解线程的创建、调度、同步和通信。通过合理利用线程,开发者可以编写出更高效、响应更快的应用程序,充分利用现代计算机的多核优势。在实际开发中,应根据需求...

    多线程精心总结

    【多线程精心总结】 在Java编程中,多线程是一种重要的并发处理方式,它可以提高程序的执行效率,尤其在处理大量...通过合理使用这些工具,开发者可以创建出既安全又高效的多线程应用,充分利用多核处理器的计算能力。

    12.1 Qt5多线程:多线程及简单实例

    总结,Qt5的多线程机制是通过QThread类实现的,它允许开发者创建独立的工作线程来处理后台任务,从而保持主线程的流畅性。`WorkThread`是一个很好的实践示例,展示了如何在Qt中自定义线程类并实现线程间的通信。正确...

    多线程以及委托的应用

    总结来说,多线程技术允许程序并行执行任务,提高效率;而委托则作为一种强大的工具,不仅用于在多线程环境中的方法调用,还为事件处理和回调提供了便利。在实际开发中,掌握这两项技术对于编写高性能、用户体验良好...

    多线程应用程序设计 报告

    ### 多线程应用程序设计知识点解析 #### 一、多线程程序设计基本原理 多线程编程是一种软件技术,允许在单个程序中并行执行多个任务或操作,从而提高程序的性能和响应能力。在多核处理器普及的今天,多线程编程...

    MFC多线程的创建,包括工作线程和用户界面线程

    ### MFC多线程的创建详解 #### 一、MFC多线程概述 MFC (Microsoft Foundation Classes) 是微软为简化Windows程序开发提供的一套类库,...在实际应用中,合理地利用MFC的多线程机制可以大大提高程序的性能和用户体验。

    自己总结的多线程

    本文从多线程的基础概念出发,深入探讨了Java中多线程的实现机制及线程安全问题,并介绍了几种常见的设计模式(包括单例模式、工厂模式和适配器模式),这些模式有助于解决多线程环境下的常见问题。通过对这些知识点...

Global site tag (gtag.js) - Google Analytics