启动线程的两个步骤:

1.实现Runnable这个接口,并实现这个接口中的run()方法。

2.实例化一个Thread对象并把实现了Runnable的对象传入Thread的构造参数中。

对Runnable和Thread的初步理解:

实现了接口Runnable中的run方法的对象就像是一份被指定的工作。而Thread就像是一个等待接收工作的工人。因此把实现了接口Runnable中的run方法的对象传入Thread()时就相当于给一个工人指定了工作。而这个被指定了工作的工人也就相当于一份可执行的线程。

以下列排队买票为例:

题目:模拟三个人排队买票,张某、李某和赵某买电影票,售票员只有三张五元的钱,电影票5元钱一张。张某拿二十元一张的新人民币排在李的前面买票,李某排在赵的前面拿一张10元的人民币买票,赵某拿一张五元的人民币买票。

简单思路:售票员为一个对象,负责找零和通知顾客排队。三个顾客各为一个对象,负责携带个人信息向售票员买票。其中要注意的是售票员对象只有一个(因为三个顾客均向该售票员买票),因此要实例化一个售票员对象并传入buyTickets()。(如果三个顾客均向不同的售票员对象买票结果可想而知。大伙可以动手尝试)

package a0315_3;//下列中有三个类 ,分别是ex测试类, buyTickets, TicketSeller
public class ex {public static void main(String args[]) {TicketSeller seller = new TicketSeller();buyTickets buy_z = new buyTickets("张 ", 20, seller); // buyTickets是实现了run方法的类,见代码第38行buyTickets buy_l = new buyTickets("李 ", 10, seller);buyTickets buy_w = new buyTickets("王 ", 5, seller);Thread thread_z = new Thread(buy_z);    // 三位工人分别接手工作Thread thread_l = new Thread(buy_l);Thread thread_w = new Thread(buy_w);thread_z.setName("张 ");thread_l.setName("李 ");thread_w.setName("王 ");thread_z.start();          // 线程按顺序开始,(模拟排队)int count = 0;while (count < 1000000) {    //世界上最原始的方法count++;}thread_l.start();       count = 0;while (count < 1000000) {count++;}thread_w.start();}
}class buyTickets implements Runnable {      // 买票这个工作String name;int money;TicketSeller seller;buyTickets(String name1, int money1, TicketSeller seller1) {name = name1;money = money1;seller = seller1;}public void run() {System.out.println(name + "开始进行买票");seller.sellTicket(money);   //携带钱去买票}}class TicketSeller // 负责卖票的类。(售票员类)
{int fiveMoney = 3, tenMoney = 0, twentyMoney = 0;public synchronized void sellTicket(int receiveMoney) {if (receiveMoney == 5) { // 张 有五块直接走fiveMoney = fiveMoney + 1;System.out.println(Thread.currentThread().getName() + "给我5元钱,不找钱");System.out.println(Thread.currentThread().getName() + "离开队列");} else if (receiveMoney == 10) { // 李while (fiveMoney < 1) { // 柜台没有五块零钱 就靠边等(循环)try {System.out.println(Thread.currentThread().getName() + "靠边等待!下一个先来");wait();System.out.println(Thread.currentThread().getName() + "结束等待");} catch (InterruptedException e) {}}fiveMoney = fiveMoney - 1;tenMoney = tenMoney + 1;System.out.println(Thread.currentThread().getName() + "给10元钱,找5元");System.out.println(Thread.currentThread().getName() + "离开队列");}else if (receiveMoney == 20) { // 赵 (柜台没有一张五块一张十块)又没有 (三张五块)就靠边等(循环)while ((fiveMoney < 1 || tenMoney < 1) && fiveMoney < 3) {try {System.out.println(Thread.currentThread().getName() + "靠边等待!下一个先来");wait();System.out.println(Thread.currentThread().getName() + "结束等待");} catch (InterruptedException e) {}}if (fiveMoney < 3) {fiveMoney = fiveMoney - 1;tenMoney = tenMoney - 1;twentyMoney = twentyMoney + 1;System.out.println(Thread.currentThread().getName() + "给20元钱,找一张5元和一张10元");}else if (fiveMoney < 1 || tenMoney < 1) {fiveMoney = fiveMoney - 3;twentyMoney = twentyMoney + 1;System.out.println(Thread.currentThread().getName() + "给20元钱,找三张5元");}System.out.println(Thread.currentThread().getName() + "离开队列");}notifyAll(); // 通知等待中的线程System.out.println("下一个!下一个!!!");}
}

运行结果 :

如果对你有所帮助,给个三连+关注吧~

java多线程对Runnable和Thread的理解及简述,内附实例。相关推荐

  1. python线程创建对象_Python线程下thread对象的用法介绍(附实例)

    本篇文章给大家带来的内容是关于Python线程下thread对象的用法介绍(附实例),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. Thread对象 Thread类用于表示单独的控制 ...

  2. Java多线程-线程的创建(Thread类的基本使用)

    文章目录 一. 线程和Thread类 1. 线程和Thread类 1.1 Thread类的构造方法 1.2 启用线程的相关方法 2. 创建第一个Java多线程程序 3. 使用Runnable对象创建线 ...

  3. Java多线程的实现方式-Thread 类,Runnable 接口

    在 Java 的 JDK 开发包中,已经自带了对多线程技术的支持,可以方便地进行多线程编程.实现多线程编程的方式主要有两种:一种是继承 Thread 类,另一种是实现 Runnable 接口.下面详细 ...

  4. Java多线程(2)--Thread类继承和Runnable接口创建线程

    Java语言的JVM允许程序运行多个线程,它通过java.lang.Thread类来体现. Thread类的特性 每个线程都是通过某个特定Thread对象的run()方法来完成操作的,经常把run() ...

  5. 【转】java线程系列---Runnable和Thread的区别

    在java中可有两种方式实现多线程,一种是继承Thread类,一种是实现Runnable接口:Thread类是在java.lang包中定义的.一个类只要继承了Thread类同时覆写了本类中的run() ...

  6. java多线程中 锁 的概念的理解,java 并发多线程显式锁概念简介 什么是显式锁 多线程下篇(一)...

    目前对于同步,仅仅介绍了一个关键字synchronized,可以用于保证线程同步的原子性.可见性.有序性 对于synchronized关键字,对于静态方法默认是以该类的class对象作为锁,对于实例方 ...

  7. Java 多线程 之 Runnable

    转载于 : http://www.verejava.com/?id=16992909097867 package com.thread;/**注意:1. 如果要启动一个线程必须调用,start()方法 ...

  8. Java多线程基础学习,Thread解读、java线程的状态、同步和异步、两阶段终止模式

    理论概述 单线程和多线程 为什么要使用多线程呢?多线程有什么好处呢? 如果在程序中,需要读写一个文件,该文件很大,那我们执行到该io操作时,cpu就会等待该io操作执行完才会继续运行下面的代码,进程调 ...

  9. java线程如何继承,java多线程(一)之继承Thread类

    一.概述 进程:正在执行的应用程序 线程:进程的执行单元,执行路径 单线程:一个应用程序只有一条执行路径 多线程:一个应用程序有多条执行路径 二.两种实现方式, 下面为第一种方式: 继承Thread类 ...

  10. Java多线程(6)——Thread类中的一些方法(传智播客毕老师视频讲解)

    1.守护线程 代码如下: import java.util.concurrent.locks.*; public class StopTest implements Runnable {private ...

最新文章

  1. c++11 模板的别名
  2. 数据挖掘实验报告-决策树程序实验
  3. DNN Experience
  4. 怎样用git获取指定的android linux kernel
  5. net use 使用
  6. js中的同步与异步的理解
  7. 5.6 深度卷积神经网络(AlexNet)
  8. FineReport程序网络报表 - Hello,World
  9. python span 抓取_python – Beautifulsoup获取span内容
  10. Property 'typeAliasesPackage' threw exception; nested exception is java.lang.ExceptionInInitializer
  11. 【经典】对static关键字深入理解
  12. linux 运维工程师必备技能
  13. Alibaba Cloud Toolkit —— 项目一键部署工具
  14. CMD控制台(命令提示符)的打开方式
  15. PyQt5 密码输入框
  16. 铝电解电容器在电路设计时的使用注意事项
  17. opencv图像处理学习(十五)——minMaxLoc函数
  18. 单片机与PC机串口通信编程
  19. 漂浮广告是什么?漂浮广告如何设置
  20. python爬虫什么书好_python爬虫什么书

热门文章

  1. 苹果计算机的优势,苹果笔记本的优缺点详细分析
  2. 单引号、双引号、三引号用法
  3. win7装sql2000找不到服务器,Win7怎么正确安装使用sql2000教程
  4. Markdown 数学公式
  5. 【laravel5.7】第一个Laravel接口之中央气象台天气接口
  6. 大数据时代的 10 个重大变化
  7. Bada学习-应用模块
  8. html页眉页脚独立,页眉页脚怎么单独设置
  9. 华工计算机专业在哪个校区,华南理工大学数学
  10. layui搭建后台管理页