`
小娘子_别跑啊
  • 浏览: 5331 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

线程入门

 
阅读更多
线程是Java的内嵌特性,线程并不容易掌握,有专门介绍Java线程的书籍,读者可以参考。由此可见Java线程的重要性,本文将详细介绍线程的基本知识。
  有的时候你可能想写一个程序,每隔一段时间执行相关的任务,这个时候你可以使用Timer和TimerTask,非常方便。你可以参考这里。

  在Java中实现一个线程有两种方法,第一是实现Runnable接口实现它的run()方法,第二种是继承Thread类,覆盖它的run()方法。下面是代码示例:


  public class DoSomething implements Runnable {
  public void run(){
  // here is where you do something
  }
  }
  public class DoAnotherThing extends Thread {
  public void run(){
  // here is where you do something
  }
  }


  这两种方法的区别是,如果你的类已经继承了其它的类,那么你只能选择实现Runnable接口了,因为Java只允许单继承的。

  Java中的线程有四种状态分别是:运行、就绪、挂起、结束。如果一个线程结束了也就说明他是一个死线程了。当你调用一个线程实例的start()的方法的时候,这个时候线程进入就绪状态,注意并不是运行状态,当虚拟机开始分配给他CPU的运行时间片的时候线程开始进入运行状态,当线程进入等待状态,例如等待某个事件发生的时候,这时候线程处于挂起状态。

  启动一个线程你只需要调用start()方法,针对两种实现线程的方法也有两种启动线程的方法,分别如下:


  DoSomething doIt = new DoSomething();
  Thread myThread = new Thread( doIt );
  myThread.start();
  DoAnotherThing doIt = new DoAnotherThing();
  doIt.start();



由于安全等因素Thread中的stop()方法已经不推荐使用了,因此如果你想要停止一个线程的时候可以通过设置一个信号量,例如:
public class MyThread implements Runnable {
  private boolean quit = false;
  public void run(){
  while( !quit ){
  // do something
  }
  }

  public void quit(){
  quit = true;
  }
  }


  如果每个线程只做它自己的事情,那么就很简单了,但是有的时候几个线程可能要同时访问一个对象并可能对它进行修改,这个时候你必须使用线程的同步在方法或者代码块使用关键字synchronized,例如:


  public class Counter {
  private int counter;
  public synchronized int increment(){
  return ++counter;
  }

  public synchronized int decrement(){
  if( --counter < 0 ){
  counter = 0;
  }

  return counter;
  }
  }



  每个java对象都可以最为一个监视器,当线程访问它的synchronized方法的时候,他只允许在一个时间只有一个线程对他访问,让其他得线程排队等候。这样就可以避免多线程对共享数据造成破坏。记住synchronized是会耗费系统资源降低程序执行效率的,因此一定要在需要同步的时候才使用,尤其在J2ME的开发中要小心。

如果你要是想让线程等待某个事件的发生然后继续执行的话,那么这就涉及到线程的调度了。在java中通过wait(),notify(),notifyAll()来实现,这三个方法是在Object类中定义的,当你想让线程挂起的时候调用obj.wait()方法,在同样的obj上调用notify()则让线程重新开始运行。 最后以SUN提供的Producer/Consumer的例子来结束这篇文章,内容是Producer产生一个数字而Consumer消费这个数字,这个小程序里面基本覆盖了本文所有的知识点。请详细研究一下代码


  public class Producer extends Thread {
  private CubbyHole cubbyhole;
  private int number;
  public Producer(CubbyHole c, int number) {
  cubbyhole = c;
  this.number = number;
  }

  public void run() {
  for (int i = 0; i < 10; i++) {
  cubbyhole.put(i);
  System.out.println("Producer #" + this.number
  + " put: " + i);
  try {
  sleep((int)(Math.random() * 100));
  } catch (InterruptedException e) { }
  }
  }
  }


  public class CubbyHole {
  private int contents;
  private boolean available = false;


  public synchronized int get() {
  while (available == false) {
  try {
  wait();
  } catch (InterruptedException e) { }
  }
  available = false;
  notifyAll();
  return contents;
  }

  public synchronized void put(int value) {
  while (available == true) {
  try {
  wait();
  } catch (InterruptedException e) { }
  }
  contents = value;
  available = true;
  notifyAll();
  }
  }

  public class Consumer extends Thread {
  private CubbyHole cubbyhole;
  private int number;

  public Consumer(CubbyHole c, int number) {
  cubbyhole = c;
  this.number = number;
  }
   public void run() {
  int value = 0;
  for (int i = 0; i < 10; i++) {
  value = cubbyhole.get();
  System.out.println("Consumer #" + this.number
  + " got: " + value);
  }
  }
  }
  public class ProducerConsumerTest {
  public static void main(String[] args) {
  CubbyHole c = new CubbyHole();
  Producer p1 = new Producer(c, 1);
  Consumer c1 = new Consumer(c, 1);

  p1.start();
  c1.start();
  }
  }
分享到:
评论

相关推荐

    java线程入门级书籍

    ### Java线程入门知识点详解 #### 一、Java线程基础知识概述 **1.1 什么是线程?** 线程是程序执行流的最小单元,是操作系统能够进行运算调度的最小单位。它被包含在进程之中,是进程中的实际运作单位。在Java中...

    Java多线程入门介绍.pdf

    ### Java多线程入门知识点详解 #### 一、引言 多线程是现代软件开发中的重要技术之一,尤其在Java编程语言中占有极其重要的地位。对于任何一位Java程序员而言,掌握多线程的基本概念和技术是非常必要的。本文将...

    java线程入门,java线程入门

    以下是对Java线程入门的详细讲解: 1. **线程的基本概念**: - 线程是操作系统分配CPU时间的基本单元,一个进程可以包含一个或多个线程。 - 在Java中,每个应用程序至少有一个主线程,它负责启动和控制其他线程。...

    android 线程入门教程

    根据提供的文件信息,我们可以提炼出Android线程入门教程的相关知识点。本教程主要面向Android开发新手,着重介绍Android中的线程机制,包括UI线程模型以及线程间通信的方法。 知识点一:Android UI单线程模型 ...

    delphi线程入门示例带文档

    本资源"delphi线程入门示例带文档"旨在帮助初学者理解并掌握Delphi中的线程编程。 线程是操作系统分配CPU时间的基本单位,每个线程都有自己的执行路径,允许程序同时执行多个任务。在Delphi中,我们可以使用TThread...

    关于多线程入门的最基础的知识(里面包括例程讲解)

    本资料包是针对多线程入门的学习资源,涵盖了多线程的基础概念、创建与管理以及同步控制等多个方面。 首先,让我们了解什么是多线程。在单线程系统中,程序的执行是顺序的,而多线程则允许在一个进程中同时运行多个...

    java多线程入门

    总之,Java多线程入门需要理解线程的基本概念、创建与管理,以及线程间通信和同步的各种机制。通过阅读《Java线程入门.pdf》这样的学习资料,结合实际编程实践,可以逐步掌握这门技术。在学习过程中,参考《E书说明....

    java线程入门 Java线程编程很好的入门书

    本文将基于提供的"Java线程入门"资料,深入探讨Java线程编程的基本概念、创建方法以及常见操作,帮助初学者建立起扎实的线程知识体系。 一、线程基础 1. 线程定义:线程是操作系统分配CPU时间的基本单元,一个进程...

    线程入门至精通

    线程入门至精通,这个主题涵盖了计算机编程中的一个重要概念——多线程。多线程是现代应用程序设计中不可或缺的一部分,特别是在高性能计算、并发处理和实时系统中。在单核CPU时代,多线程主要是为了提高程序的响应...

    C++多线程入门.pdf

    1. C++多线程编程基础:文档标题“C++多线程入门.pdf”表明文档是关于C++多线程编程的入门级教程。文档描述没有提供更多信息,但可以假设文档会介绍C++多线程编程的基本概念、语法和应用。 2. C++标准库中多线程的...

    多线程入门,分布式锁,等相关资料

    本资源包提供了一套全面的多线程入门学习资料,帮助开发者深入理解这两个主题。 多线程是现代计算机编程中的基础概念,尤其是在Java这样的多线程支持语言中。在单核CPU时代,多线程主要用来实现程序的并发执行,...

    java线程入门,一本简绍java线程的书

    本书《Java线程入门》显然为初学者提供了一个良好的起点,适合对编程有一定了解的人群。书中可能涵盖了以下几个核心知识点: 1. **线程的概念与分类**:介绍什么是线程,线程如何在操作系统中运行,以及Java中线程...

    C++多线程入门[整理].pdf

    C++多线程入门[整理] 在现代计算机系统中,多线程编程是提高系统性能和响应速度的重要手段。C++作为一门面向对象的编程语言,提供了对多线程编程的支持。本文将从基本概念开始,介绍多线程编程的基本概念、线程的...

    Java线程入门大全

    ### Java线程入门大全知识点详解 #### 一、线程基础概述 - **定义与特点:** - **线程**是一种比进程更细粒度的执行单元,它允许在一个进程中并发执行多个任务。 - **多线程**能够提高程序的效率和响应速度,...

    Java线程入门,学习Java线程的好帮手

    Java线程入门,学习Java线程的好帮手

    delphi多线程入门实例

    本文将基于"delphi多线程入门实例"这个主题,深入讲解Delphi中如何实现简单的多线程。 首先,我们需要了解Delphi中的TThread类,它是VCL框架提供的一种用于创建线程的基础类。通过继承TThread类并重写其Execute方法...

    DSPBIOS多线程入门级要点

    DSPBIOS多线程入门级要点 DSPBIOS多线程技术是DSP系统中的一种高级编程技术,能够满足多个非相关的程序或函数同时运行的需求。这些程序运行和执行时间都有严格的要求,这些程序被称为线程(thread)。在DSP中任何...

    C++多线程入门

    C++多线程入门

Global site tag (gtag.js) - Google Analytics