`

线程和Runnable接口的理解

 
阅读更多
通过卖票来进行解释:
1.ThreadTicket.java:
Java代码 
public static void main(String[] args) {  
        // sell1();  
        sell2();  
 
    }  
 
    public static void sell2() {  
        MyRunnable mt = new MyRunnable();  
        new Thread(mt).start();// 同一个mt,但是在Thread中就不可以,如果用同一  
        new Thread(mt).start();// 个实例化对象mt,就会出现异常  
        new Thread(mt).start();  
    }  
 
    public static void sell1() {  
        MyThread mt1 = new MyThread();  
        MyThread mt2 = new MyThread();  
        MyThread mt3 = new MyThread();  
        mt1.start();// 每个线程都各卖了10张,共卖了30张票  
        mt2.start();// 但实际只有10张票,每个线程都卖自己的票  
        mt3.start();// 没有达到资源共享  
    } 

public static void main(String[] args) {
// sell1();
sell2();

}

public static void sell2() {
MyRunnable mt = new MyRunnable();
new Thread(mt).start();// 同一个mt,但是在Thread中就不可以,如果用同一
new Thread(mt).start();// 个实例化对象mt,就会出现异常
new Thread(mt).start();
}

public static void sell1() {
MyThread mt1 = new MyThread();
MyThread mt2 = new MyThread();
MyThread mt3 = new MyThread();
mt1.start();// 每个线程都各卖了10张,共卖了30张票
mt2.start();// 但实际只有10张票,每个线程都卖自己的票
mt3.start();// 没有达到资源共享
}



2.MyThread.java:
Java代码 
public class MyThread extends Thread {  
    private int ticket = 10;  
 
    public void run() {  
        for (int i = 0; i < 20; i++) {  
            if (this.ticket > 0) {  
                System.out.println("卖票:ticket" + this.ticket--);  
            }  
        }  
    }  


public class MyThread extends Thread {
private int ticket = 10;

public void run() {
for (int i = 0; i < 20; i++) {
if (this.ticket > 0) {
System.out.println("卖票:ticket" + this.ticket--);
}
}
}
}



3.MyRunnable.java:
Java代码 
 
public class MyRunnable implements Runnable {  
 
    private int ticket = 10;  
 
    @Override 
    public void run() {  
        for (int i = 0; i < 20; i++) {  
            if (this.ticket > 0) {  
                System.out.println("卖票:ticket" + this.ticket--);  
            }  
        }  
    }  
分享到:
评论

相关推荐

    java 多线程Thread与runnable的区别

    主要介绍了java 多线程Thread与runnable的区别的相关资料,java线程有两种方法继承thread类与实现runnable接口,下面就提供实例帮助大家理解,需要的朋友可以参考下

    java并发编程:线程基础

    通过深入学习,您将建立扎实的多线程编程基础,能够更好地理解和应用多线程编程。 多线程概述: 简要介绍多线程编程的重要性和应用场景。解释为什么多线程可以提高程序性能和资源利用率。 线程的创建: 详细讲解线程...

    Java多线程与线程安全实践-基于Http协议的断点续传.rar

    在这个项目中,开发者将学习如何利用Java的并发工具如Thread类和Runnable接口来创建和管理多个线程,同时确保在文件传输过程中的数据一致性和传输效率。此外,项目还涵盖了异常处理、网络IO操作、文件IO操作等核心...

    讲给女朋友听的java多线程(2万字深入理解多线程,有实例代码辅助理解)

    实现Runnable接口3. 实现Callable接口4. 使用线程池线程的调度线程的生命周期线程同步1. 方法一:同步代码块2. 方法二:同步方法3. 方法三:Lock(锁):4. 对比三种方法5. 典型例题6. 线程死锁问题线程通信两个方法...

    Java线程

    实现Runnable接口创建自线程 线程状态(创建、就绪、执行、阻塞、终止) 线程常用方法 inturrupt打断线程 join()线程并行执行变为串行 理解线程的概念 一个程序至少有一个进程,一个进程至少有一个线程; 线程是...

    西南科技大学Java程序设计与实践 实验六 多线程实验实验报告及源码

    西南科技大学Java程序设计与实践 实验六 多线程实验实验报告及源码...2、分别采用Thread类的子类和Runnable接口两种方式完成两个线程的设计; 3、进行全面的测试并分析测试结果;4、简要说明你在该实验中的收获与体会。

    深入理解高并发编程-Java线程池核心技术

    java并发编程实战pdf 线程与多线程 1.线程 在操作系统中,线程是比进程更小的能够独立运行的基本单位。同时,它也是 CPU 调度的基本单位。...Runnable 接口,实现 Callable 接口。简单的示例代码分别如下所示。

    多线程

    2. 利用Runnable接口实现与第1题相同的功能; 3. 测试一个Applet小应用程序,体会多线程程序的运行过程; 三、实验步骤 1. 按照要求编写第1题中的代码,并将其编译、运行。 1) 由于第一个线程和第二个线程的功能...

    java多线程设计模式详解(PDF及源码)

    单线程程序 多线程程序 Thread类的run方法和start方法 线程的启动 线程的启动(1)——利用Thread类的子类 线程的启动(2)——利用Runnable接口 线程的暂时停止 线程的共享互斥 synchronized方法 synchronized阻挡 ...

    全面的Java多线程用法解析

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

    BAT面试官有点懵系列,Java多线程你真的理解透彻了吗?带你玩转一次多线程!Let’s go!别再out了!

    文章目录神标题引入线程和进程多线程的优势线程创建方式继承Thread类来创建和启动实现Runnable接口重写run方法创建线程类使用 Callable 和 Future 创建线程三种创建线程方式做出对比线程生命周期线程控制join线程...

    java多线程机制 -- 源码详解

    This代表着小程序作为这个新的线程的目标对象,因此我们的小程序必须为这个新创建的线程实现Runnable接口,即小程序利用Runnable接口为其中创建的这个新线程提供run()方法,给出该线程的操作。 首先,在小程序的...

    Java进阶学习——Java多线程知识的理解

    实现Runnable接口3.线程的生命周期4.线程安全4.1.为什么需要线程安全?4.2.如何实现线程安全?5.线程池5.1.为什么需要线程池?5.2.创建线程池5.2.1.创建可缓存线程池5.2.2.创建定时周期性的任务执行线程池5.2.3.创建...

    什么是线程,线程是什么

    这篇文章我将采用故事案例来进行对线程的上锁和解锁的讲解,让编程小白也能理解线程的概念以及对线程的认识和学会使用的方法 创建线程的几种方法: 1、创建一个类继承Thread类,重写run()方法,将所要完成的任务代码...

    Java高级程序设计-多线程(二).pptx

    线程的创建有继承Thread类和实现Runnable接口两种方式,通过Runnable方式可以更加容易实现多线程之间资源共享。 通过sleep可以使线程进入休眠状态,通过join方法可以让线程处于等待,其他线程执行完毕后继续执行。 ...

    Java抢火车票程序源码-multithread:多线程

    有两种方法,一继承Thread类,二实现Runnable接口,区别是类只能单继承,接口可以无限。 注意一点:多线程是异步,代码的执行顺序与调用顺序是没有关系的。线程的调用和线程都具有随机特性,原因是你不知道CPU什么...

    JAVA高级程序设计测试题含答案.docx

    JAVA高级程序设计测试题含答案 JAVA高级...第14题 【单选题】【2.00分】【概念理解】 哪个方法是实现Runnable接口必须实现的 [单选题] * JAVA高级程序设计测试题含答案全文共43页,当前为第4页。 A. wait() B. run()

    java面试题,180多页,绝对良心制作,欢迎点评,涵盖各种知识点,排版优美,阅读舒心

    【多线程】Callable 和 Runnable接口 82 【多线程】Java四种线程池的创建方法 83 【多线程】线程池原理和运行机制 83 【多线程】线程池对任务的处理 85 【多线程】线程池的状态 86 线程池的状态说明 86 各个状态之间...

Global site tag (gtag.js) - Google Analytics