java线程

一:传统方式:
在这里插入图片描述
在这里插入图片描述

二:实现Runnable接口方法
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

三:实现Runnable接口
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
每个线程共享了对象myRunnable的资源,卖出的总票数是对的,但是顺序是乱的,怎么办?

见:同步关键词synchronized
https://blog.csdn.net/zengmingen/article/details/53246633

三:继承Thread类
在这里插入图片描述
在这里插入图片描述
一号窗口卖票—>10
三号窗口卖票—>10
三号窗口卖票—>9
二号窗口卖票—>10
三号窗口卖票—>8
一号窗口卖票—>9
三号窗口卖票—>7
二号窗口卖票—>9
三号窗口卖票—>6
一号窗口卖票—>8
三号窗口卖票—>5
二号窗口卖票—>8
三号窗口卖票—>4
一号窗口卖票—>7
三号窗口卖票—>3
二号窗口卖票—>7
三号窗口卖票—>2
一号窗口卖票—>6
三号窗口卖票—>1
二号窗口卖票—>6
一号窗口卖票—>5
二号窗口卖票—>5
一号窗口卖票—>4
二号窗口卖票—>4
一号窗口卖票—>3
二号窗口卖票—>3
一号窗口卖票—>2
二号窗口卖票—>2
一号窗口卖票—>1
二号窗口卖票—>1

为什么会出现这种结果呐。我们不妨做个比喻,其实刚的程序,

继承Thread类的,我们相当于拿出三件事即三个卖票10张的任务分别分给三个窗口,他们各做各的事各卖各的票各完成各的任务,因为MyThread继承Thread类,所以在new MyThread的时候在创建三个对象的同时创建了三个线程;

实现Runnable的, 相当于是拿出一个卖票10张得任务给三个人去共同完成,new MyThread相当于创建一个任务,然后实例化三个Thread,创建三个线程即安排三个窗口去执行。

用图表示如下:
在这里插入图片描述

在我们刚接触的时候可能会迷糊继承Thread类和实现Runnable接口实现多线程,其实在接触后我们会发现这完全是两个不同的实现多线程,一个是多个线程分别完成自己的任务,一个是多个线程共同完成一个任务。

其实在实现一个任务用多个线程来做也可以用继承Thread类来实现只是比较麻烦,一般我们用实现Runnable接口来实现,简洁明了。

  

大多数情况下,如果只想重写 run() 方法,而不重写其他 Thread 方法,那么应使用 Runnable 接口。这很重要,因为除非程序员打算修改或增强类的基本行为,否则不应为该类(Thread)创建子类。

二:java线程睡眠示例
在这里插入图片描述
每次间隔一秒打印一次…
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值