java实现线程的两种方式

要求:一个火车站,三个售票员卖出100张票

1.通过继承Thread类实现

实现思路:建立ThreadTest类继承Thread并建立三个线程卖100张票

public class ThreadTest extends Thread {
    private int i = 100;
    public void run() {
        while(true){
            if(i>0) {
                System.out.println(Thread.currentThread().getName() + "正在售出第" + i-- + "张票");
            }
        }
    }

    public static void main(String[] args){
        ThreadTest th = new ThreadTest();
        new Thread(th).start();
        new Thread(th).start();
        new Thread(th).start();
    }
}

体会:三个线程之间无序卖票,且线程之间无干扰。

2.通过实现Runnable接口达到要求

实现思路:建立ThreadTest类实现Runnable接口并建立一个对象的三个线程卖100张票

public class ThreadTest implements Runnable {
    private int i = 100;
    public void run() {
        while(true){
            if(i>0) {
                System.out.println(Thread.currentThread().getName() + "正在售出第" + i-- + "张票");
            }
        }
    }

    public static void main(String[] args){
        ThreadTest th = new ThreadTest();
        new Thread(th).start();
        new Thread(th).start();
        new Thread(th).start();
    }
}

个人体会:三个线程共同卖出100张票,线程之间无序执行,th就相当于一个火车站,然后三个售票员卖100张票

拓展:三个火车站共同卖出100张票

思路:建立三个ThreadTest类的对象当做三个火车站,每个火车站一个售票员,把票变为静态属性

public class ThreadTest extends Thread {
    static int i = 100;
    public void run() {
        while(true){
            if(i>0) {
                System.out.println(Thread.currentThread().getName() + "正在售出第" + i-- + "张票");
            }
        }
    }

    public static void main(String[] args){
        ThreadTest th1 = new ThreadTest();
        new Thread(th1).start();//一火车站一售票员
        ThreadTest th2 = new ThreadTest();
        new Thread(th2).start();
        ThreadTest th3 = new ThreadTest();
        new Thread(th3).start();
    }
}

总结:一个ThreadTest类的对象就是一个火车站,一个进程就相当于一个售票员。。。

时间: 2024-10-13 23:52:58

java实现线程的两种方式的相关文章

Java开启线程的两种方式

------<a href="http://www.itheima.com" target="blank">Java培训.Android培训.ios培训..Net培训</a>.期待与您交流!------ Java开启线程的两种方式: 方式一:成为线程(Thread)的儿子,即继承Thread类简单代码如下:class Student extends Thread{Student(String name){super(name);}public

Java创建线程的两种方式

方式 继承Thread类 实现Runnable方法 实例 #继承Thread类 public class ThreadTest2 extends Thread { private int threadCnt = 10; @Override public void run() { while (true) { if (threadCnt > 0) { System.out.println(Thread.currentThread().getName() + " 剩余个数 " + t

Java并发编程-创建线程的两种方式及区别

转载请注明:http://blog.csdn.net/UniKylin/article/details/45016117 1.线程和进程的区别 并行:是多个任务在同一时间同时执行,例如多核计算机同时计算的任务可以理解为并行 并发:从微观上看是多个任务抢占一个CPU从而执行自己的任务,轮流执行任务,但是如果遇到资源冲突的时候并没有从根本提高执行效率.但是提高了CPU的使用效率. 前段时间在GitHub上的一幅图可以很好的阐述上面的概念非常形象 2.Java中创建线程的两种方式 1.第一种方式:直接

【java并发】传统线程技术中创建线程的两种方式

传统的线程技术中有两种创建线程的方式:一是继承Thread类,并重写run()方法:二是实现Runnable接口,覆盖接口中的run()方法,并把Runnable接口的实现扔给Thread.这两种方式大部分人可能都知道,但是为什么这样玩就可以呢?下面我们来详细分析一下这两种方法的来龙去脉. 1. 揭秘Thread中run()方法 上面我们看到这两种方式都跟run()方法有关,所以我们来看一下Thread的源码中run()方法到底都干了什么: @Override public void run()

创建线程的两种方式比较Thread VS Runnable

1.首先来说说创建线程的两种方式 一种方式是继承Thread类,并重写run()方法 1 public class MyThread extends Thread{ 2 @Override 3 public void run() { 4 // TODO Auto-generated method stub 5 6 } 7 } 8 //线程使用 9 MyThread mt = new MyThread(); //创建线程 10 mt.start(); //启动线程 另外一种方式是实现Runnabl

黑马程序员——创建线程的两种方式

java中创建线程有两种方式: 1.继承Thread类 步骤: (1)定义一个类继承Thread类 (2)复写Thread类中的run()方法 (3)调用start()方法:启动线程及调用run()方法 2.实现Runnable接口的方式 步骤:(1)定义一个类实现Runnable接口 (2)覆盖Runnable接口中的run()方法,将线程要运行的代码放到该run方法中 (3)通过Thread类建立线程对象 (4)将实现Runable接口的类对象作为实际参数传递给Thread的构造函数. (5

java 实现多线程的两种方式

一.问题引入 说到这两个方法就不得不说多线程,说到多线程就不得不提实现多线程的两种方式继承Thread类和实现Runable接口,下面先看这两种方式的区别. 二. Java中实现多线程的两种方式 1.  继承Thread类 /** * 使用Thread类模拟4个售票窗口共同卖100张火车票的程序,实际上是各卖100张 */ public class ThreadTest { public static void main(String[] args){ new MyThread().start(

开辟线程的两种方式

/** 自定义执行单元的两种方式 区别 runnable避免了单继承的局限性 runnable资源可以被独立共享 多线程如何找问题1.明确哪些代码是多线程运行代码2.明确哪些是共享数据3.明确多线程代码中哪些语句是操作共享数据的 @author WangShuang /public class Test {public static void main(String[] args) {/MyThread t0=new MyThread();MyThread t1=new MyThread();t

Java实现线程的三种方式和区别

Java实现线程的三种方式和区别 Java实现线程的三种方式: 继承Thread 实现Runnable接口 实现Callable接口 区别: 第一种方式继承Thread就不能继承其他类了,后面两种可以: 使用后两种方式可以多个线程共享一个target: Callable比Runnable多一个返回值,并且call()方法可以抛出异常: 访问线程名,第一种直接使用this.getName(),后两种使用Thread.currentThread().getName(). 下面我们通过代码来看一下实现