`

Runnable 和 Thread

 
阅读更多

我们都知道创建线程有两个方法:  一是通过继承Thread类;二是向Thread类传递一个Runnable对象.

比如说一个售票站有四个窗口卖票,我们要设计四个线程

第一种方法:传递一个Runnable对象.

public class MyThread
{
 public static void main(String[] args)
 {
  TestThread tt = new TestThread();
  new Thread(tt).start();
  new Thread(tt).start();
  new Thread(tt).start();
  new Thread(tt).start(); 
}
}  
class TestThread implements Runnable
{
 public int ticket = 100;
 public void run()
 {
  while(ticket>0)
  {
   System.out.println(Thread.currentThread().getName()+"is saling ticket"+ticket--);
  }
 }
}
 

 二.通过继承Thread类

public class MyThread
{
 public static void main(String[] args)
 {
  TestThread tt1 = new TestThread().start();
  TestThread tt2= new TestThread().start();                  
TestThread tt3 = new TestThread().start();
TestThread tt4 = new TestThread().start();


}
}
class TestThread implements Runnable
{
 public int ticket = 100;
 public void run()
 {
  while(ticket>0)
  {
   System.out.println(Thread.currentThread().getName()+"is saling ticket"+ticket--);
  }
 }
}
 

 结论:

方法一中四个线程是合作卖100张,而方法二中是四个线程分别各卖100张,就是说四个线程都会卖同一张票四次。

也就是说Runnalbe 是多个对象同时跑一个run,Thread是各自跑各自的

 

分享到:
评论
2 楼 xiaoxiecomeon 2012-04-26  
你这个程序一存在线程的时间片相互抢占的问题,运行时间长了很可能会卖出0、-1、-2这张票。你可以在while输出的后面加一句sleep(1)试一下,会找到问题的。
1 楼 dotjar 2012-04-20  
我觉得话应该这么说:
引用

TestThread tt = new TestThread(); 
  new Thread(tt).start(); 
  new Thread(tt).start(); 
  new Thread(tt).start(); 
  new Thread(tt).start();

这里只有一个线程实例,所以ticket数据共享;

引用

TestThread tt1 = new TestThread().start(); 
TestThread tt2= new TestThread().start();                   
TestThread tt3 = new TestThread().start(); 
TestThread tt4 = new TestThread().start();

各有各自的ticket,各自属于各自的实例,不存在数据共享问题。
这就是说,上边那个是线程间数据共享的例子,有如火车售票。
我也是来总结下,沾沾楼主的光。
楼主万福!

相关推荐

    Java中Runnable和Thread的区别

    在Java编程语言中,多线程的实现有多种方式,其中最常见的是通过继承`Thread`类和实现`Runnable`接口。这两种方法各有其特点和适用场景,理解它们之间的区别对于编写高效、可维护的多线程应用至关重要。 ### 继承...

    Java中Runnable和Thread的区别分析.rar

    在创建线程时,我们通常会遇到两种主要的方式:实现`Runnable`接口和继承`Thread`类。虽然两者都能实现多线程,但它们之间存在着重要的区别,这些差异主要体现在设计模式、内存共享、线程的创建以及线程的生命周期...

    浅析Java中Runnable和Thread的区别

    在Java编程语言中,创建和管理多线程有两种主要的方式:继承`Thread`类和实现`Runnable`接口。这两种方式都是为了实现并发执行任务,但它们之间存在一些关键的区别。 首先,当我们创建一个新的线程时,实际上是为了...

    Java中Runnable和Thread的区别分析

    在Java编程语言中,创建多线程有两种主要的方式:继承`Thread`类和实现`Runnable`接口。这两种方法都有其特点和适用场景,下面我们详细分析它们的优缺点。 首先,让我们看看继承`Thread`类的方法。`Thread`类是Java...

    多线程的Runnable_和thread有什么区别

    ### 多线程的Runnable与Thread的区别 在Java中实现多线程有两种主要方式:一种是继承`Thread`类;另一种是实现`Runnable`接口。本文将深入探讨这两种方法的区别,帮助初学者更好地理解并选择适合场景的多线程实现...

    JAVA多线程Thread和Runnable的实现

    有两种主要的方式可以实现多线程:继承`Thread`类和实现`Runnable`接口。这两种方法各有特点,适用于不同的场景。 **继承Thread类** 当一个类直接继承自`Thread`类时,这个类本身就成为一个线程实体。你可以重写`...

    认识Thread和Runnable

    "认识Thread和Runnable" Thread 和 Runnable 是 Java 中实现多线程的两种方式。继承 Thread 类或者实现 Runnable 接口可以实现多线程。Runnable 接口建议使用,因为它可以实现多继承,并且只有一个 run 方法,很...

    thread 线程类 实现runnable接口

    Thread 线程类是 Java 中 Thread 和 Runnable 接口的实现,它提供了线程的基本操作和管理。下面是对 Thread 类的详细介绍: 1. Runnable 接口 Runnable 接口是 Thread 类的基类,它提供了 run() 方法,该方法是...

    JAVA中使用Thread类和Runnable接口创建多线程

    在Java中创建线程有两种方法:使用Thread类和使用Runnable接口。在使用Runnable接口时需要建立一个Thread实例。因此,无论是通过Thread类还是Runnable接口建立线程,都必须建立Thread类或它的子类的实例。

    Android开发笔记之:Handler Runnable与Thread的区别详解

    Handler、Runnable和Thread都是实现多线程的方式,但它们之间有着不同的使用场景和特点。 1. 继承Thread类: 当一个类直接继承自Thread类时,可以直接覆写run()方法来实现多线程。这种方式的缺点是类的继承性受到...

    【java学习记录】11.多线程实现阶乘计算(Thread类和Runnable接口)

    本篇文章将深入探讨如何利用`Thread`类和`Runnable`接口来实现阶乘计算的多线程解决方案。阶乘计算是数学中的一个概念,对于非负整数n,其阶乘表示为所有小于等于n的正整数的乘积,记作n!。 首先,我们来看如何使用...

    Android 线程和线程池核心技术-走进线程世界 (一)

    合理利用AsyncTask、Runnable、Thread、Handler、Looper、线程池和线程同步机制,能帮助开发者设计出更加健壮和高效的Android应用。在实际开发中,应根据任务特性和需求,选择最适合的线程管理方式。通过Demo实践,...

    java线程_Thread_Runnable

    Java提供了两种创建线程的方式:继承Thread类和实现Runnable接口。 1. 继承Thread类创建线程: 当你选择继承Thread类时,你需要创建一个新的类,这个类扩展自Thread类。Thread类已经实现了Runnable接口,所以你不...

    RunnableThread1.java

    RunnableThread1.java

    基于Java多线程的并发编程指南.zip

    线程创建与启动介绍了如何使用Runnable和Thread接口创建和启动线程。 线程状态管理详细讲解了线程的六种状态(NEW、RUNNABLE、BLOCKED、WAITING、TIMEDWAITING、TERMINATED)及其转换。 线程属性讨论了线程的ID、...

    并发基础RunnableThreadExecutor专题.pdf

    总的来说,Java并发编程通过Runnable和Thread实现了简单的多线程执行,而Executor服务则提供了更高级的线程管理和调度。当需要处理任务结果时,Callable接口提供了返回值的能力。这些组件结合使用,可以构建出复杂、...

    Java有两种实现多线程的方式:通过Runnable接口、通过Thread直接实现,请掌握这两种实现方式,并编写示例程序。

    在Java中,实现多线程的两种主要方式分别是:**通过继承`Thread`类** 和 **实现`Runnable`接口**。下面将详细介绍这两种方式,并提供相应的示例程序。 #### 一、通过继承`Thread`类实现多线程 在Java中,可以通过...

    详解Java中Thread 和Runnable区别

    详解Java中Thread和Runnable区别 Java中Thread和Runnable是两个不同的概念,它们都是Java中的线程机制,但是它们之间有着本质的区别。 Thread是Java中的一个类,而Runnable是一个接口。Thread类实现了Runnable接口...

    实验10多线程编程.pdf

    接着文档中出现了Java编程语言中实现多线程编程的两个主要接口:Runnable和Thread。Runnable接口代表一个可以被线程执行的任务,而Thread类代表一个可以执行Runnable任务的线程。文档通过Animal类继承Thread来创建...

Global site tag (gtag.js) - Google Analytics