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类的对象就是一个火车站,一个进程就相当于一个售票员。。。
java实现线程的两种方式的更多相关文章
- Java新建线程的两种方式
Java新建线程有两种方式,一种是通过继承Thread类,一种是实现Runnable接口,下面是新建线程的两种方式. 我们假设有个竞赛,有一个选手A做俯卧撑,一个选手B做仰卧起坐.分别为两个线程: p ...
- java创建线程的两种方式及源码解析
创建线程的方式有很多种,下面我们就最基本的两种方式进行说明.主要先介绍使用方式,再从源码角度进行解析. 继承Thread类的方式 实现Runnable接口的方式 这两种方式是最基本的创建线程的方式,其 ...
- Java实现线程的两种方式?Thread类实现了Runnable接口吗?
Thread类实现了Runnable接口吗? 我们看看源码中对与Thread类的部分声明 public class Thread implements Runnable { /* Make sure ...
- Java创建线程的两种方式
方式 继承Thread类 实现Runnable方法 实例 #继承Thread类 public class ThreadTest2 extends Thread { private int thread ...
- 当阿里面试官问我:Java创建线程有几种方式?我就知道问题没那么简单
这是最新的大厂面试系列,还原真实场景,提炼出知识点分享给大家. 点赞再看,养成习惯~ 微信搜索[武哥聊编程],关注这个 Java 菜鸟. 昨天有个小伙伴去阿里面试实习生岗位,面试官问他了一个老生常谈的 ...
- 【java并发】传统线程技术中创建线程的两种方式
传统的线程技术中有两种创建线程的方式:一是继承Thread类,并重写run()方法:二是实现Runnable接口,覆盖接口中的run()方法,并把Runnable接口的实现扔给Thread.这两种方式 ...
- 1.java多线程_实现线程的两种方式
1.java多线程基本知识 1.1.进程介绍 不管是我们开发的应用程序,还是我们运行的其他的应用程序,都需要先把程序安装在本地的硬盘上.然后找到这个程序的启动文件, 启动程序的时候,其实是电脑把当前的 ...
- Java并发基础01. 传统线程技术中创建线程的两种方式
传统的线程技术中有两种创建线程的方式:一是继承Thread类,并重写run()方法:二是实现Runnable接口,覆盖接口中的run()方法,并把Runnable接口的实现扔给Thread.这两种方式 ...
- 创建线程的两种方式比较Thread VS Runnable
1.首先来说说创建线程的两种方式 一种方式是继承Thread类,并重写run()方法 public class MyThread extends Thread{ @Override public vo ...
随机推荐
- asp.net mvc中使用jquery H5省市县三级地区选择控件
地区选择是项目开发中常用的操作,本文讲的控件是在手机端使用的选择控件,不仅可以用于实现地区选择,只要是3个级别的选择都可以实现,比如专业选择.行业选择.职位选择等.效果如下图所示: 附:本实例asp. ...
- Hadoop集群(第6期)JDK和SSH无密码配置
1.Linux配置java环境变量 1.1 解压安装jdk 在shell终端下进入jdk-6u14-linux-i586.bin文件所在目录,执行命令 ./jdk-6u14-linux-i586.bi ...
- spring boot之security
上一节的时候,我们打开了springboot的端点,有一些数据是非常敏感的,比如/shutdown. 这一节,我们要给一些敏感信息加上权限控制. spring boot本身的security模块就很好 ...
- Django之F、Q查询,事务,自定义char字段
F查询 from django.db.models import F,Q # 当查询条件来自于数据库的某个字段,这个时候就必须使用F # 查询卖出数大于库存数的商品 res = models.Prod ...
- Java NIO: Non-blocking Server 非阻塞网络服务器
本文翻译自 Jakob Jenkov 的 Java NIO: Non-blocking Server ,原文地址:http://tutorials.jenkov.com/java-nio/non-bl ...
- Redis 安装和配置(一)
一. mac下redis的安装 1. 官网http://redis.io/ 下载最新的稳定版本,这里是3.2.0 2. sudo mv 到 /usr/local/ 3. sudo tar -zxf r ...
- 手动安装gitlab-runner
手动安装gitlab-runner 在终端使用命令curl -L https://packages.gitlab.com/install/repositories/runner/gitlab-runn ...
- Input标签中Type的类型及详细用法
Input表示Form表单中的一种输入对象,其又随Type类型的不同而分文本输入框,密码输入框,单选/复选框,提交/重置按钮等,下面一一介绍.1,type=text输入类型是text,这是我们见的最多 ...
- 浅说——状压DP
第一次没认真听,没听懂.(有点难) 第二次才搞懂,主要位运算太烦了!!! 位运算基础知识: 名称 符号 规则 按位与 & 全一则一,否则为零 按位或 | 有一则一,否则为零 按位取反 ~ 是零 ...
- CentOs7.5安装FFmpeg
一.FFmpeg简介 FFmpeg是一个自由软件,可以运行音频和视频多种格式的录影.转换.流功能,包含了libavcodec ─这是一个用于多个项目中音频和视频的解码器库,以及libavformat— ...