• 试论多线程Java多线程编程技术的研究毕业论文网

试论多线程Java多线程编程技术的研究毕业论文网wWw.7ctiMe.cOm

论文导读:

  【摘要】Java开发技术在现阶段正在被广泛应用,相比较c++的另一个分支c#而言Java的实现环境更为简单,比较而言也是轻量级变成语言的体现。能够通过Java实现所有的软件,包括手机客户端软件、PC机软件以及网站建设。Java语言已经逐步成为最流行的编程语言。Java拥有多线程的特点,本文将对此进行详细的介绍。

  【关键词】Java;多线程;语言;环境

  

  一、前言

  Java语言已经是一种相对成熟的开发语言,很多程序员选择使用Java语言进行轻量级软件的开发研究。在Java多线程编程技术的开发领域存在着很多技术上的难点,针对这些难点,本文将给予分析阐述,通过详细的归纳研究,确定Java多线程编程技术的核心思想和核心理念。

  二、多线程介绍

  多线程是这样一种机制,它允许在程序中并发执行多个指令流,每个指令流都称为一个线程,彼此间互相独立。线程又称为轻量级进程,它和进程一样拥有独立的执行控制,由操作系统负责调度,区别在于线程没有独立的存储空间,而是和所属进程中的其它线程共享一个存储空间,这使得线程间的通信远较进程简单。

  具体到java内存模型,由于Java被设计为跨平台的语言,在内存管理上,显然也要有一个统一的模型。系统存在一个主内存(Main Memory), Java中所有变量都储存在主存中,对于所有线程都是共享的。每条线程都有自己的工作内存(Working Memory),工作内存中保存的是主存中某些变量的拷贝,线程对所有变量的操作都是在工作内存中进行,线程之间无法相互直接访问,变量传递均需要通过主存完成。

  多个线程的执行是并发的,也就是在逻辑上“同时”,而不管是否是物理上的“同时”。如果系统只有一个CPU,那么真正的“同时”是不可能的。多线程和传统的单线程在程序设计上最大的区别在于,由于各个线程的控制流彼此独立,使得各个线程之间的代码是乱序执行的,将会带来线程调度,同步等问题。

  三、Java中实现多线程的方法

  我们不妨设想,为了创建一个新的线程,我们需要做些什么?很显然,我们必须指明这个线程所要执行的代码,而这就是在Java中实现多线程我们所需要做的一切!

  作为一个完全面向对象的语言,Java提供了类 java.lang.Thread 来方便多线程编程,这个类提供了大量的方法来方便我们控制自己的各个线程。

  那么如何提供给 Java 我们要线程执行的代码呢?让我们来看一看 Thread 类。Thread 类最重要的方法是 run() ,它为Thread 类的方法 start() 所调用,提供我们的线程所要执行的代码。为了指定我们自己的代码,只需要覆盖它!

  方法一:继承 Thread 类,重写方法 run(),我们在创建的 Thread 类的子类中重写 run() ,加入线程所要执行的代码即可。

  这种方法简单明了,符合大家的习惯,但是,它也有一个很大的缺点,那就是如果我们的类已经从一个类继承,则无法再继承 Thread 类。

  方法二:实现 Runnable 接口

  Runnable 接口只有一个方法 run(),我们声明自己的类实现 Runnable 接口并提供这一方法,将我们的线程代码写入其中,就完成了这一部分的任务。但是 Runnable 接口并没有任何对线程的支持,我们还必须创建 Thread 类的实例,这一点通过 Thread 类的构造函数public Thread(Runnable target);来实现。

  使用 Runnable 接口来实现多线程使得我们能够在一个类中包容所有的代码,有利于封装下面让我们一起来研究一下多线程使用中的一些问题。

  四、线程的交互

  不同的线程可以执行不同的任务,如果这些任务之间是有某种联系的,那么必须编写使它们交互的程序。Java的Object类为此提供了三个方法:wait()、notify()和notifyAll()。线程调用一个对象的wait()方法,线程将释放以这个对象为标记的锁,进入以这个对象为标记的等待池中;一个线程调用一个对象的notify()方法,将从以这个对象为标记的等待池中随机挑出一个线程,放入锁池中;一个线程调用notifyAll()方法,可以使正在等待该对象的线程都从等待池进入锁池中。通常对wait()、notify()和notifyAll()方法的调用应该放在同步代码块中。Java的线程从产生到灭亡,有以下几个状态。

  1、新建状态(New):创建了线程类子类的实例并初始化后,该对象就处于新建状态,此时有了相应的存储空间和相应进程的资源。

  2、就绪状态或可运行状态(Runnable):处于新建状态的线程被启动后,就处于就绪状态,即进入就绪队列等待CPU时间片的到来。此时已具备了运行的条件。至于该线程何时才被真正执行,则取决于线程的优先级和就绪队列的当前状态。

  3、挂起状态(Blocked):正在运行或处于就绪状态的线程由于某种原因,

  让出CPU并暂时终止自己的执行,即进入挂起状态,只有当被挂起的原因被解除时方可转入就绪或运行状态。

  4、终止状态(Dead):一个线程完成了其所有操作或被提前强行结束时即终止,此时线程不能再被恢复和执行

  五、线程的同

源于:论文格式标准http://www.swuzs.com

  由于同一进程的多个线程共享同一片存储空间,在带来方便的同时,也带来了访问冲突这个严重的问题。Java语言提供了专门机制以解决这种冲突,有效避免了同一个数据对象被多个线程同时访问。

  我们只需针对方法提出一套机制,这套机制就是synchronized关键字,它包括两种用法:synchronized方法和synchronized块。

  1.synchronized方法:通过在方法声明中加入synchronized关键字来声明synchronized方法。synchronized方法控制对类成员变量的访问:每个类实例对应一把锁,每个synchronized方