/**

* 使用Thread类模拟4个售票窗口共同卖100张火车票的程序

*

* 没有共享数据,每个线程各卖100张火车票

*

* @author jiqinlin

* */public class ThreadTest {    public static void main(String[] args){        new MyThread().start();        new MyThread().start();        new MyThread().start();        new MyThread().start();

}

public static class MyThread extends Thread{        //车票数量        private int tickets=100;

@Override        public void run() {            while(tickets>0){

System.out.println(this.getName()+"卖出第【"+tickets--+"】张火车票");

}

}

}

}

/**

* 使用Runnable接口模拟4个售票窗口共同卖100张火车票的程序

*

* 共享数据,4个线程共同卖这100张火车票

* @author jiqinlin

* */public class RunnableTest {    public static void main(String[] args) {

Runnable runnable=new MyThread();        new Thread(runnable).start();        new Thread(runnable).start();        new Thread(runnable).start();        new Thread(runnable).start();

}

public static class MyThread implements Runnable{        //车票数量        private int tickets=100;        public void run() {            while(tickets>0){

System.out.println(Thread.currentThread().getName()+"卖出第【"+tickets--+"】张火车票");

}

}

}

}

采用继承Thread类方式:

(1)优点:编写简单,如果需要访问当前线程,无需使用Thread.currentThread()方法,直接使用this,即可获得当前线程。

(2)缺点:因为线程类已经继承了Thread类,所以不能再继承其他的父类。 采用实现Runnable接口方式:

采用实现Runnable接口的方式:

(1)优点:线程类只是实现了Runable接口,还可以继承其他的类。在这种方式下,可以多个线程共享同一个目标对象,所以

非常适合多个相同线程来处理同一份资源的情况,从而可以将CPU代码和数据分开,形成清晰的模型,较好地体现了面向对象

的思想。

(2)缺点:编程稍微复杂,如果需要访问当前线程,必须使用Thread.currentThread()方法。

java如何实现多线程_Java中实现多线程的两种方式相关推荐

  1. java hashmap遍历顺序_Java中HashMap遍历的两种方式

    第一种: Map map =  HashMap(); Iterator iter = map.entrySet().iterator(); (iter.hasNext()) { Map.Entry e ...

  2. java类初始数组_java中数组初始化的三种方式是什么

    java中数组初始化的三种方式是:1.静态初始化,如[int a[] = {2, 0, 1, 9, 2020}]:2.动态初始化,如[int[] c = new int[4]]:3.默认初始化,如[i ...

  3. java new class 直接调用_java中创建对象的的两种方式具体解释,一个是new一个是调用Class类的newinstance方法?...

    展开全部 1.new 使用java的关键字new来创建对象实例.构造函数链中的所有构造函数都32313133353236313431303231363533e78988e69d833133333739 ...

  4. java 如何初始化数组_java中初始化数组的三种方式分别是什么

    三种初始化方式: 1.静态初始化:创建+赋值 2.动态初始化:先创建再赋值 3.默认初始化:创建之后若不赋值则会被赋对应数据类型的默认值 (视频教程推荐:java视频) 我们来看一下具体代码:publ ...

  5. java中创建两种线程的方式_java中创建线程的两种方式有什么区别?

    *** 一.创建线程 1.继承Thread类 定义类继承Thread, 重写run()方法, 将线程中要执行的代码写在run()方法中 创建该类对象, 调用start()方法就可以开启一条新线程, 新 ...

  6. java获取文件后缀_Java获取文件后缀的两种方式

    在对文件进行操作的时候,我们经常需要用到文件的后缀.但是Java API中并没有提供获取文件后缀的方法.下面的工具方法可以帮助我们实现这个目的. 方法1 代码示例: package org.4spac ...

  7. Java中HashMap遍历的两种方式

    第一种: Map map = new HashMap(); Iterator iter = map.entrySet().iterator(); while (iter.hasNext()) { Ma ...

  8. 实验四:使用库函数API和C代码中嵌入汇编代码两种方式使用同一个系统调用

    贺邦+原创作品转载请注明出处 + <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 实验目的: 使用库函数 ...

  9. 使用库函数API和C代码中嵌入汇编代码两种方式使用同一个系统调用

    实验4:使用库函数API和C代码中嵌入汇编代码两种方式使用同一个系统调用 姓名:李冬辉 学号:20133201 注: 原创作品转载请注明出处 + <Linux内核分析>MOOC课程http ...

  10. sh执行文件 参数传递_详解shell中脚本参数传递的两种方式

    方式一:$0,$1,$2.. 采用$0,$1,$2..等方式获取脚本命令行传入的参数,值得注意的是,$0获取到的是脚本路径以及脚本名,后面按顺序获取参数,当参数超过10个时(包括10个),需要使用${ ...

最新文章

  1. 正则显示手机号显示3 4 4 格式
  2. java 替换四个字节的字符 '\xF0\x9F\x98\x84\xF0\x9F)的解决方案
  3. 在 Jenkins 中使用声明式 Pipeline 构建 Android 项目
  4. 【python】关于控制台的中文输出出现\x形式的问题 python常用包与如何安装
  5. poj2186强联通(牛仰慕)
  6. 算法设计原则验证实验报告_算法设计与分析实验报告 统计数字问题
  7. Drupal 自定义主题实体 Theming Custom Entities
  8. java注解---@SuppressWarnings
  9. MVC视图中处理Json
  10. 18.抽象模板方法———获取程序运行的时间
  11. 爬虫 动态生成useragent的功能 fake-useragent库
  12. 深入jar包:从jar包中读取资源文件
  13. 两个有序链表序列的交集_剑指offer第21天:合并两个有序链表
  14. JavaScript学习笔记——正则验证
  15. TypeScript:对象
  16. (转)对冲基金投身“另类数据”淘金热
  17. 基于UDS协议的Bootloader
  18. 四叶草启动引导配置工具 !Clover Configurator中文版下载!
  19. TOPSIS法——利用原始数据进行综合评价
  20. Matlab 和 Simulink 学习基础入门

热门文章

  1. Kafka常用命令行命令
  2. 意大利卡乐1tool编程软件从模板新建项目
  3. linux下latex中文字体,Latex中文字体问题
  4. 第二十四次CSP考试第二题,速度拿70分。
  5. 供应链管理分类的互联网思维
  6. H3C--策略路由以及IRF2
  7. java opencv 视频教程_OpenCV视频目标跟踪示例教程(Meanshift)
  8. 查看目标机的IP 地址
  9. 一起学 WebGL:感受三维世界之视图矩阵
  10. 如何用ArcGIS出一张标准中国地图?常见误区有哪些?