Java多线程编程精要之实现线程

逍遥红枫叶

逍遥红枫叶

2016-01-29 12:58

Java多线程编程精要之实现线程,Java多线程编程精要之实现线程
  使用 Java 编程语言实现线程

  Java编程语言使多线程如此简单有效,以致于某些程序员说它实际上是自然的。尽管在 Java 中使用线程比在其他语言中要容易得多,仍然有恍└拍钚枰莆铡R亲〉囊患匾氖虑槭?main() 函数也是一个线程,并可用来做有用的工作。程序员只有在需要多个线程时才需要创建新的线程。

  Thread 类

  Thread 类是一个具体的类,即不是抽象类,该类封装了线程的行为。要创建一个线程,程序员必须创建一个从 Thread 类导出的新类。程序员必须覆盖 Thread 的 run() 函数来完成有用的工作。用户并不直接调用此函数;而是必须调用 Thread 的 start() 函数,该函数再调用 run()。下面的代码说明了它的用法:

  创建两个新线程

  import java.util.*;

  class TimePrinter extends Thread {
  int pauseTime;
  String name;
  public TimePrinter(int x, String n) {
  pauseTime = x;
  name = n;
  }

  public void run() {
  while(true) {
   try {
    System.out.println(name + ":" + new Date(System.currentTimeMillis()));
    Thread.sleep(pauseTime);
   } catch(Exception e) {
    System.out.println(e);
   }
  }
  }

  static public void main(String args[]) {
  TimePrinter tp1 = new TimePrinter(1000, "Fast Guy");
  tp1.start();
  TimePrinter tp2 = new TimePrinter(3000, "Slow Guy");
  tp2.start();

  }
  }

  在本例中,我们可以看到一个简单的程序,它按两个不同的时间间隔(1 秒和 3 秒)在屏幕上显示当前时间。这是通过创建两个新线程来完成的,包括 main() 共三个线程。但是,因为有时要作为线程运行的类可能已经是某个类层次的一部分,所以就不能再按这种机制创建线程。虽然在同一个类中可以实现任意数量的接口,但 Java 编程语言只允许一个类有一个父类。同时,某些程序员避免从 Thread 类导出,因为它强加了类层次。对于这种情况,就要 runnable 接口。

  Runnable 接口

  此接口只有一个函数,run(),此函数必须由实现了此接口的类实现。但是,就运行这个类而论,其语义与前一个示例稍有不同。我们可以用 runnable 接口改写前一个示例。(不同的部分用黑体表示。)

  创建两个新线程而不强加类层次

  import java.util.*;

  class TimePrinter implements Runnable {
  int pauseTime;
  String name;
  public TimePrinter(int x, String n) {
  pauseTime = x;
  name = n;
  }

  public void run() {
  while(true) {
   try {
    System.out.println(name + ":" + new Date(System.currentTimeMillis()));
    Thread.sleep(pauseTime);
   } catch(Exception e) {
    System.out.println(e);
   }
  }
  }

  static public void main(String args[]) {
  Thread t1 = new Thread(new TimePrinter(1000, "Fast Guy"));
  t1.start();
  Thread t2 = new Thread(new TimePrinter(3000, "Slow Guy"));
  t2.start();
  }
  }


  请注意,当使用 runnable 接口时,您不能直接创建所需类的对象并运行它;必须从 Thread 类的一个实例内部运行它。许多程序员更喜欢 runnable 接口,因为从 Thread 类继承会强加类层次。

  synchronized 关键字

  到目前为止,我们看到的示例都只是以非常简单的方式来利用线程。只有最小的数据流,而且不会出现两个线程访问同一个对象的情况。但是,在大多数有用的程序中,线程之间通常有信息流。试考虑一个金融应用程序,它有一个 Account 对象,如下例中所示:

  一个银行中的多项活动

  public class Account {
  String holderName;
  float amount;
  public Account(String name, float amt) {
  holderName = name;
  amount = amt;
  }

  public void deposit(float amt) {
  amount += amt;
  }

  public void withdraw(float amt) {
  amount -= amt;
  }

  public float checkBalance() {
  return amount;
  }
  }

  在此代码样例中潜伏着一个错误。如果此类用于单线程应用程序,不会有任何问题。但是,在多线程应用程序的情况中,不同的线程就有可能同时访问
展开更多 50%)
分享

猜你喜欢

Java多线程编程精要之实现线程

Java JAVA基础
Java多线程编程精要之实现线程

Java多线程编程精要

Java JAVA基础
Java多线程编程精要

s8lol主宰符文怎么配

英雄联盟 网络游戏
s8lol主宰符文怎么配

Java多线程编程精要之基础

Java JAVA基础
Java多线程编程精要之基础

Java多线程编程精要之高级支持

Java JAVA基础
Java多线程编程精要之高级支持

lol偷钱流符文搭配推荐

英雄联盟 网络游戏
lol偷钱流符文搭配推荐

Java 多线程编程

编程语言 网络编程
Java 多线程编程

Java 5.0 多线程编程实践

编程语言 网络编程 语言程序设计
Java 5.0 多线程编程实践

lolAD刺客新符文搭配推荐

英雄联盟
lolAD刺客新符文搭配推荐

《刀剑神域 虚空碎片》最新DLC任务攻略心得

《刀剑神域 虚空碎片》最新DLC任务攻略心得

VS2005Beta2安装几点经验和体会

VS2005Beta2安装几点经验和体会
下拉加载更多内容 ↓