今天来给大家稍微讲一下什么是多线程,为什么是稍微讲一下呢?因为这个多线程是非常非常
复杂的,我还没想好怎么讲,我觉得,要想通过一个博客就把多线程给讲明白是不现实的,还是
要大家多看书,多实践。大家都知道实践是多么重要的,就好像咱们的岛国片子一样,只看不动
手有意思?
首先,明确一下我们今天要学习的内容: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!!!!!
相关推荐
去睡觉吧 第11章 Thread-Specific Storage——每个线程的保管箱 第12章 Active Object——接受异步消息的主动对象 总结 多线程程序设计的模式语言 附录A 练习问题的解答 附录B Java的内存模型 附录C Java线程的...
多线程与并发处理是程序设计好坏优劣的重要课题,本书通过浅显易懂的文字与实例来介绍Java线程相关的设计模式概念,并且通过实际的Java程序范例和 UML图示来一一解说,书中在代码的重要部分加上标注使读者更加容易...
2、支持多任务多线程同时下载; 3、每个任务的线程数由用户在新建任务时自定义,缺省为5个线程; 4、任务下载过程中可以点击“线程+”或“线程-”即时增减线程; 5、选择任务,可以在任务信息栏中查看任务下载的信息...
计算机后端-Java-Java核心基础-第19章 IDEA的使用与多线程 12. 多线程的优点等.avi
精品java学习教程,原理讲解+源码实战 27天实现java从入门到进阶 第一天:语言环境 第二天:常量变量 第三天:流程控制 第四、五天:方法与数组 第六天:类 第七天:对象的出生 第八天:类与类继承 第九天:具体到...
java多线程机制: 例子 1 public class Example1 { static Lefthand left;static Righthand right; public static void main(String args[]) { left=new Lefthand(); //创建两个线程。 right=new Righthand();...
完整版精品java课件 Java基础入门教程 Java程序设计 第12章 applet(共16页).ppt 完整版精品java课件 Java基础入门教程 Java程序设计 第13章 多线程(共24页).ppt 完整版精品java课件 Java基础入门教程 Java程序...
讲:陈冬 第一课:计算机中的环境变量 第二课:认识JVM 安装JDK 第三课:认识JAVA中的变量 第三课:理解类与对象 第三课附加:值传递和对象传递 第四课:继承 ...第十二课:jdbc 第十三课:设计模式
Day1 一、 从面向过程编程到面向对象编程的思维转变 二、 什么是字节码和虚拟机: 三、 环境变量的设置 四、 kate工具的使用 五、 我们的第一个Java...《多线程》 Day12 一.I/O 流(java 如何实现与外界数据的交流)
第12章 Active Object——接受异步消息的主动对象 总结 多线程程序设计的模式语言 附录A 练习问题的解答 附录B Java的内存模型 附录C Java线程的优先级 附录D 线程相关的主要API 附录E 参考文献
Java SE完整版精品优质课件 自学入门必看的优秀Java基础知识培训教案 特别适合新入门自学的新手同学,也适合老手回顾学习,巩固知识 第1章 Java语言概述 ...第12章 Java常用类 第13章 Java反射 第14章 网络编程
链接:https://pan.baidu.com/s/1BTZ_xj94Rb1nJ0B8MP0t-Q 下载后...第12章 JavaApplet基础 第13章 常见数据结构的Java实现 第14章图形与图像 第15章 Java数据库连接(JDBC) 第16章 Java与多媒体 第17章 JavaSwing基础
JAVA语言实现:编写10个线程,第一个线程从1加到10,第二个线程从11加到20...第十个线程从91加到100,最后再把十个线程结果相加
人工智能-项目实践-多任务-一个支持多线程,断点续传功能的Android下载工具 功能特性 断点续传 支持多线程 (目前版本仅支持单任务单线程,多任务才多线程,未来会继续完善单任务的多线程执行) 使用本项目的理由 可靠...
00 IBM developerWorks 中国 : Java 多线程与并发编程专题 02 Java 程序中的多线程 03 编写多线程的 Java 应用程序 04 如果我是国王:关于解决 Java编程语言线程问题的建议 (2) 05 构建Java并发模型框架 (2) 06...
第二十一讲 Java中的多线程编程