Java多线程之 Thread VS Runnable
来源:互联网 发布:handpan软件 编辑:程序博客网 时间:2024/05/20 16:11
为此,我们举个例子,假设有火车站有三个窗口,在卖火车票,总共只有5张票。每一个线程相当于一个窗口,分别售票
- <strong>package com.thread;
- class myThread extends Thread{
- private int ticketsCount=5;//一种有5张票
- private String name;//窗口,也即是线程的名字
- public myThread(String name){
- this.name=name;
- }
- @Override
- public void run() {
- while(ticketsCount>0) {
- //ticketsCount--;//如果还有票,就卖掉一张
- System.out.println(name+"有"+ticketsCount+"张票,卖了1一张票,剩余票数为:"+ --ticketsCount);
- //System.out.println(name+"卖了1一张票,剩余票数为:"+ticketsCount);
- }
- }
- }
- public class TicketsTread {
- public static void main(String args[]) {
- //创建三个线程,模拟三个窗口卖票
- myThread t1=new myThread("窗口1");
- myThread t2=new myThread("窗口2");
- myThread t3=new myThread("窗口3");
- //启动这三个线程,也即是窗口开始卖票
- t1.start();
- t2.start();
- t3.start();
- }
- }
- </strong>
输出为:
这样的结果说明了,每个窗口(线程)都卖了5张票,这是因为创建了3个Thread对象,每个对象有自己的成员实例变量。
因为每个线程,mt1,mt2,mt3分别是一个继承了Thread类的一个对象,所以对象拥有其所属类的私有或共有的成员变量或者成员方法,也就是说他们的变量,也即是票数ticketCount都是每个对象“自己”私有的,“各自为营”,资源并不是共享的。 那么,你就会看到,每个窗口都有5张票的情况咯。。
再使用runnable 来实现这个示例。
- package com.thread;
- class myThread_Runnable implements Runnable{
- private int ticketsCount=5;//一种有5张票
- public void run() {//如果给run方法加锁,那么会出现一个窗口会卖光所有票的现象
- while(ticketsCount>0) {
- ticketsCount--;//如果还有票,就卖掉一张
- System.out.println(Thread.currentThread().getName()+"卖了1一张票,剩余票数为:"+ticketsCount);
- }
- }
- }
- public class TicketsRunnable {
- public static void main(String args[]){
- myThread_Runnable mt=new myThread_Runnable();
- //创建三个线程,来模拟三个售票窗口
- Thread t1=new Thread(mt,"窗口1");
- Thread t2=new Thread(mt,"窗口2");
- Thread t3=new Thread(mt,"窗口3");
- //启动这三个线程,也即是三个窗口,开始卖票
- t1.start();
- t2.start();
- t3.start();
- }
- }
上面这个是一个及其特殊的情况,线程(窗口)1一次性的使用了CPU并执行完了了run方法的所有代码,然后进程结束。
下面这个是一般性的结果:
上面这个输出就可以看出来,线程资源抢夺所导致的交叉执行。
0 0
- Java多线程之 Thread VS Runnable
- JAVA多线程之Thread VS Runnable
- 多线程之Thread VS Runnable
- Java多线程之 Thread VS Runnable 【带案例】
- Java 多线程之 Runnable VS Thread 及其资源共享问题
- JAVA多线程之Thread&&Runnable
- 细说多线程之Thread VS Runnable
- 3.多线程之Thread VS Runnable
- 细说多线程之Thread VS Runnable
- 多线程 Thread VS Runnable
- 多线程 Thread VS Runnable
- JAVA多线程Thread VS Runnable详解
- Java多线程Thread VS Runnable详解
- 【java0006】多线程 - Thread VS Runnable
- Java多线程编程之Runnable、Thread简介
- Java多线程 之 Runnable Thread (一)
- JAVA多线程之Runnable和Thread比较
- JAVA多线程之Runnable和Thread比较
- 对象引用
- C++不定参数的应用
- Cpuinfo
- Log4j配置之按时间生成、按大小生成新文件
- Handler机制-从源码角度分析
- Java多线程之 Thread VS Runnable
- HDU 2010 水仙花数(水)
- 设置三个Slider控件,管理背景颜色,任意改变一个控件,背景颜色都会发生改变
- 字幕编解码器
- android工程下不能运行java main程序的解决办法
- 剑指Offer面试题3:二维数组中的查找
- 用开源项目ActivityOptionsICS让ActivityOptions的动画实现兼容
- 欢迎使用CSDN-markdown编辑器
- 作为码农,我们为什么要写作