【小白的java成长系列】——多线程初识(多人买票问题)

本来这节内容是要到后面来说的,因为最近在弄并发的问题,推荐一本书《java并发编程实战》,深入的讲解了多线程问题的。本人最近也刚好在看这本书,还不错的~

多线程的相关概念,就不用说了的,自己可以去网上查找,有一大堆关于它的讲解~

先来看看买票的程序:

package me.javen.thread.one;

public class TicketDemo {
	public static void main(String[] args) {
		// 使用Thread类的方式
//		TicketThead ticketThead1 = new TicketThead();
//		TicketThead ticketThead2 = new TicketThead();
//		TicketThead ticketThead3 = new TicketThead();
//		ticketThead1.start();
//		ticketThead2.start();
//		ticketThead3.start();

		// 使用Runnable的方式
		TicketRunnable ticketRunnable = new TicketRunnable();
		Thread thread1 = new Thread(ticketRunnable);
		Thread thread2 = new Thread(ticketRunnable);
		Thread thread3 = new Thread(ticketRunnable);
		thread1.run();
		thread2.run();
		thread3.run();
	}
}

class TicketThead extends Thread {
	private int ticket = 10;

	public void run() {
		for (int i = 0; i < 100; i++) {
			if (this.ticket > 0) {
				System.out.println(Thread.currentThread().getName()
						+ "买票:ticket=" + (ticket--));
			}
		}
	}
}

class TicketRunnable implements Runnable {
	private int ticket = 10;

	@Override
	public void run() {
		for (int i = 0; i < 100; i++) {
			if (this.ticket > 0) {
				System.out.println(Thread.currentThread().getName()
						+ "买票:ticket=" + (ticket--));
			}
		}
	}
}

从上面代码可以看出,java实现多线程有两种方式:

  • 继承Thread类
  • 实现Runnable接口

那么这两者有什么区别呢?为什么要提供两种方式呢?

其实我们在开发过程中主要还是使用Runnable接口。

实现Runnable接口比继承Thread类有明显的优点:

  • 适合多个形同程序代码的线程去处理同一个资源
  • 可以避免由于单继承局限所带来的影响
  • 增强了程序的健壮性

我们分别通过两种方式(使用Thread和使用runnable的方式)去运行以上的代码,可以看到,Thread总共卖出的票是30张,Runnable卖出的是10张(达到了资源共享)。

Thread方式:

Runnable方式:

代码解释:

Thread.currentThread()  -->表示获取当前进程

【小白的java成长系列】——多线程初识(多人买票问题)

时间: 2024-10-26 06:18:18

【小白的java成长系列】——多线程初识(多人买票问题)的相关文章

【小白的java成长系列】——Java基础知识

今天来说说java的基础知识,个人感觉都不知道要说啥的,还是为后面的内容做一些铺垫吧~ 今天主要说的都是java面向对象之前的基础知识,比如数据类型呀,表达式运算符呀~等等一系列的知识,下节来说说面向对象.今天这节我就不用程序来说明,直接用文字说明.因为个人感觉真木有啥好说的,这些程序后续都会说到的,比较简单,写写就会了的..好吧~开始了... 1. Java数据类型划分: 基本数据类型:都是一个个具体的值 数值型:表示具体的数字,所有的整数默认情况下都是int,所有的小数都是double型的

【小白的java成长系列】——this关键字

先来看一下下面这段代码: package me.javen.oop; public class ThisDemo { public static void main(String[] args) { Dog dog = new Dog("小花", 10);//创建对象 System.out.println(dog); } } class Dog{ private String name; private int age; public Dog(){}//无参构造 public Dog(

【小白的java成长系列】——构造方法私有化(单例设计)

有了解过spring框架的童鞋们就知道,spring的bean默认是什么形式呀?---单例形式的. 问:那什么叫做单例?单例其实就是Singleton,顾名思义就是只有单个的实例对象操作. 那为什么要使用单例呢? 至于这个问题,后面再做解释,我们先看代码: package me.javen.oop; public class SingletonDemo { public static void main(String[] args) { Singleton singleton1 = Single

【小白的java成长系列】——顶级类Object源码分析

首先来说一下api文档使用,api这个词对有一定开发经验的java编程人员来说是很喜爱的~ java当然也提供了api开发文档,下载地址:http://www.oracle.com/technetwork/java/javase/downloads/index.html 找到下面的: 下载自己喜爱的版本即可,解压,点击~/jdk-7u60-apidocs/api/index.html就可以查看其api了: 跟上网一样一样的,点击相应链接就可以查看其信息了. 进入正题,说说Object这个类: 先

【小白的java成长系列】——java关键字

准备出一个系列的内容啦,今天就从关键字开始说起吧~ 类型 关键字 说明 关键字 说明 访问控制权限 public 公共的,公开的, protected 受保护的,用来修饰属性或方法.只能符合有包内友好关系,或者是父子友好的类才能够访问,即:同层次包底下的可以访问:不能修饰类. private 私有的,用来修饰属性或方法,只能类的内部本身才能够访问,不能修饰类.   其实修饰符还有一种友好的类型 类.方法和变量修饰符 abstract 抽象;可以用来修饰类和方法,被修饰的类不能够实例化(即不能用n

【小白的java成长系列】——String类的深入分析(基于源码)

接着前面面向对象来说吧~今天来说说String类..其实String类也包含很多面向对象的知识的~ 首先来问一个问题:我们在开发过程中,如果要使用一个类的话,就要创建对象,这句话没什么问题吧~在实际开发的时候确实是这样的,只有创建了对象才能真正的去使用一个普通的类,我们一般创建对象,几乎所有的类创建对象都是要通过new关键字来创建的~ 问题就来了..为什么我们的String可以直接写成String str = "abc";这样子呢? 当然String类也可以通过new来创建对象的...

【小白的java成长系列】——面向对象基础

今天来说说java面向对象的知识点~事实上.java在其发展过程中可以成功.非常大一部分原因是其面向对象的思想~ 1.概念 如今来说面向对象思想.也不是什么新的知识点了,我们知道如今非常多语言都有面向对象的思想了:当然我们还知道如今依然非常火的C语言.事实上还是面向过程的语言.包含近期一段时间也出现了非常多新的思想,比方面向函数,面向分布式,面向...等等一系列的东东,事实上这些都仅仅是一个概念而已~ 在面向对象中.实际上还存在着三个基本的特性: ·封装性:保证对外部不可见: ·继承性:继续发扬

【小白的java成长系列】——java ide 开发工具eclipse的操作

今天看了一下自己的博客文章,里面的内容还是比較杂的,有好多技术,有好多语言,都没有突出自己的强项,能够说,从博客里面,看不出我究竟是做哪块的..加上今天被授予了博客准专家勋章,自己想了一下,还是得梳理一下自己的知识点,事实上我是做java开发,眼下职位是java高级开发project师. 今天来说说java的IDE神器--eclipse. 1.下载地址:http://www.eclipse.org/downloads/ 前提是你要安装好jdk,參照http://blog.csdn.net/ens

夯实Java基础系列10:深入理解Java中的异常体系

目录 为什么要使用异常 异常基本定义 异常体系 初识异常 异常和错误 异常的处理方式 "不负责任"的throws 纠结的finally throw : JRE也使用的关键字 异常调用链 自定义异常 异常的注意事项 当finally遇上return JAVA异常常见面试题 参考文章 微信公众号 Java技术江湖 个人公众号:黄小斜 - Java异常 本系列文章将整理到我在GitHub上的<Java面试指南>仓库,更多精彩内容请到我的仓库里查看 https://github.c