`
java从入门到放弃
  • 浏览: 44953 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

java从0开始学习第十二课-多线程是如此的简单

阅读更多

  今天来给大家稍微讲一下什么是多线程,为什么是稍微讲一下呢?因为这个多线程是非常非常

复杂的,我还没想好怎么讲,我觉得,要想通过一个博客就把多线程给讲明白是不现实的,还是

要大家多看书,多实践。大家都知道实践是多么重要的,就好像咱们的岛国片子一样,只看不动

手有意思?

  

  首先,明确一下我们今天要学习的内容:1、什么是多线程,2、开干一个多线程项目,大家做

完这个项目立马就可以装逼。

 

1、什么是多线程?多线程就是有几个线程,不止一个。那什么是线程?线程是进程的一部分,是

 

程序执行的基本单元。

 

2、开干什么项目?我们经常用到的一个场景,取钱和存钱。假设小明有一张银行卡,他的老婆叫

小红。小明负责用支付宝存钱,小红负责在超市逛街刷卡,而且我们假设小明的银行卡最多只能存600块钱(项目需要··),而且不准透支。马上开干啦!

 

首先要定义一个帐号类:

 

class Account{
	private int money;
	public synchronized void saveMoney(int num){//存钱的动作
		if(money>=600){
			System.out.println("你的卡已经很多钱了,不准再存了!!");
				try {
					wait();
				} catch (InterruptedException e) {
					e.printStackTrace();
				}
		}
		money+=num;
		System.out.println("存钱成功,存入:"+num+",卡上余额:"+money);
		notify();
	}
	public synchronized void takeMoney(int num){ //取钱的动作
		if(num>money){
			System.out.println("你没钱了,叫小明快点打钱过来");
			try {
				wait();
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
		}
			money-=num;
			System.out.println("刷卡成功,消费金额:"+num+",卡上余额:"+money);
		    notifyAll();
	}
}

 

 

     非常有必要给大家讲一下这个synchronized(同步)是什么意思。我们加上这个玩意(一般都叫他‘锁’)之后,当一个线程t1获得了这个锁之后,其他的对象t2不能再对这个帐号进行操作了,T2就处于了阻塞的状态,当t1调用了wait()方法之后,t2就可以进行takeMoney了。

  通俗的讲,某女优(有怪癖)只能被一个男优a搞,不允许一起来,当男优a不行了(wait()),那么男优b才能搞该女优

 

我们再定义2个线程类,存钱类和取钱类,都来继承一下牛逼的Thread类。

 

class ThreadTake extends Thread{
	Account a;
	public ThreadTake(Account account){
		this.a=account;
	}
	@Override
	public void run() {
		int i=0;
		while(i<5){
			a.takeMoney(200);
			i++;
		}
	}
}

class ThreadSave extends Thread{
	Account a;
	public ThreadSave(Account account){
		this.a=account;
	}
	@Override
	public void run() {
		int i=0;
		while(i<5){
			a.saveMoney(200);
			i++;
		}
	}
}

 然后是main方法:

 

 

public static void main(String[] args) {
		Account account=new Account();
		Thread t1=new ThreadSave(account);
		Thread t2=new ThreadTake(account);
		t1.start();
		t2.start();
	}

 

 

最后我们跑起来看看是什么样的?

存钱成功,存入:200,卡上余额:200
存钱成功,存入:200,卡上余额:400
存钱成功,存入:200,卡上余额:600
你的卡已经很多钱了,不准再存了!!
刷卡成功,消费金额:200,卡上余额:400
刷卡成功,消费金额:200,卡上余额:200
刷卡成功,消费金额:200,卡上余额:0
你没钱了,叫小明快点打钱过来
存钱成功,存入:200,卡上余额:200
存钱成功,存入:200,卡上余额:400
刷卡成功,消费金额:200,卡上余额:200
刷卡成功,消费金额:200,卡上余额:0

 好啦,是不是非常简单啊。多线程就这点招,你们都会了吗?如果认为自己搞熟悉了,再多搞几次,男人一定要让自己能干一点!!!

 

 其实我们刚才实现多线程是继承了所谓的Thread类,其实还有一个方法是实现传说中的Runnable接口。一会大家可是搞搞她,如果能搞定她,说明你们的能力又提升了。

 

这个Runnable和Thread有什么区别呢?大家记住一点,没啥区别,但是java可以实现多个接口,只可以继承一个类,这个就是他们最大的区别,而且这个Thread类也是实现Runnable。建议多用Runnable!!!!!

分享到:
评论

相关推荐

    Java语言程序设计教程课件第十一章多线程程序设计

    Java语言从设计之初就内置了对多线程编程的支持,这一点通过它的并发API和语言层面的特性得到体现。 首先,我们来认识一下什么是多线程。在程序设计中,单线程程序只拥有一个执行流程,而多线程程序则拥有多个执行...

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

    去睡觉吧 第11章 Thread-Specific Storage——每个线程的保管箱 第12章 Active Object——接受异步消息的主动对象 总结 多线程程序设计的模式语言 附录A 练习问题的解答 附录B Java的内存模型 附录C Java线程的...

    Java多线程编程核心技术_完整版_java_

    Java多线程编程是Java开发中的重要组成部分,它允许程序同时执行多个任务,极大地提高了程序的效率和响应性。在Java中,多线程主要通过继承Thread类或实现Runnable接口来实现。本教程《Java多线程编程核心技术》将...

    java入门第一课

    Java入门第一课主要针对初学者,旨在提供一个良好的起点,帮助理解Java编程语言的基本概念和语法。这个课程可能源自GitHub上的一个开源项目,因此,它应该是动态更新的,随着学习者的需求和技术的发展而不断丰富。 ...

    java多线程详解

    ### Java多线程详解:深度探索Java线程机制 #### 知识点一:线程与进程的区别 在深入探讨Java多线程之前,我们首先需要理解线程与进程的基本概念及其区别。进程是资源分配的基本单位,拥有独立的内存空间,而线程...

    Java软件开发实战 Java基础与案例开发详解 12-1 多线程 共18页.pdf

    ### Java软件开发实战:Java基础与案例开发详解之多线程 #### 1. 多线程概述 在现代软件开发中,为了提高程序的执行效率和响应速度,多线程技术被广泛应用。多线程是指在一个程序中同时运行多个线程的能力。线程是...

    JAVA语言学习课件--从零开始

    Java语言学习课件——从零开始,这是一套专为初学者设计的全面Java学习资源。Java作为一种广泛应用的编程语言,其强大之处在于它的跨平台性、面向对象的设计以及丰富的类库。本课件旨在帮助零基础的学习者逐步掌握...

    java-多线程下载器(支持断点续传、线程加减)包含源码和可运行jar包 第二版

    2、支持多任务多线程同时下载; 3、每个任务的线程数由用户在新建任务时自定义,缺省为5个线程; 4、任务下载过程中可以点击“线程+”或“线程-”即时增减线程; 5、选择任务,可以在任务信息栏中查看任务下载的信息...

    java多线程设计模式 (PDF中文版, 附源码)

    第12章 Active Object——接受异步消息的主动对象 总结 多线程程序设计的模式语言 附录A 练习问题的解答 附录B Java的内存模型 附录C Java线程的优先级 附录D 线程相关的主要API 附录E 参考文献

    JAVA学习第一课 H

    Java学习第一课 H 在Java学习的初期,我们通常会从基础语法和核心概念开始,以便为后续的深入学习打下坚实的基础。本课“JAVA学习第一课 H”聚焦于Java编程语言的基本要素,帮助初学者理解这个强大而广泛使用的编程...

    JAVA2学习资料--第二部分ppt教程

    【JAVA2学习资料--第二部分ppt教程】 Java作为全球最流行的编程语言之一,因其跨平台、面向对象的特点,被广泛应用于各种领域,如企业级应用开发、移动应用(Android)、大数据处理等。本教程主要针对Java2阶段的...

    计算机后端-Java-Java核心基础-第19章 IDEA的使用与多线程 12. 多线程的优点等.avi

    计算机后端-Java-Java核心基础-第19章 IDEA的使用与多线程 12. 多线程的优点等.avi

    Java核心技术 第12版 开发基础+高级特性 英文原版

    书中的内容分为多个章节,从Java编程平台的介绍开始,解释了Java的“白皮书”关键词,如简单性、面向对象、分布式、健壮性、安全性、架构中立、可移植性、解释性、高性能、多线程和动态性。接着,书中详细介绍了Java...

    java学习笔记-----给java初学者

    这份笔记涵盖了从基础概念到高级特性的全面内容,是学习和复习Java知识的理想工具。 1. **Java简介** Java是一种跨平台、面向对象的编程语言,由Sun Microsystems(现为Oracle公司)于1995年推出。它的“一次编写...

    《Java多线程设计模式》附源码中文教程 (PDF)

    多线程与并发处理是程序设计好坏优劣的重要课题,本书通过浅显易懂的文字与实例来介绍Java线程相关的设计模式概念,并且通过实际的Java程序范例和 UML图示来一一解说,书中在代码的重要部分加上标注使读者更加容易...

    韩顺平java从入门到精通1-32课源码笔记

    《韩顺平java从入门到精通1-32课源码笔记》是一份全面而深入的Java学习资源,由知名讲师韩顺平精心讲解。这份资料涵盖了从Java基础到高级特性的全方位教学,旨在帮助初学者系统地掌握这门强大的编程语言。下面,我们...

    java学习文档(快速学习-非常使用)

    【Java学习文档(快速学习-非常实用)】 Java是一种广泛使用的高级编程...随着学习深入,还将涉及异常处理、集合框架、IO流、多线程、网络编程等更复杂的主题。对于想要快速学习Java的人来说,这是一个很好的起点。

Global site tag (gtag.js) - Google Analytics