【编程语言】Java6

day15

线程

主频:切换进程频率,越快越好。

核:能同时并行处理的进程。

?何时需要多线程

提高效率

程序是还没运行起来的代码,进程是运行起来的代码,线程是你在代码块中可以开的子代码块(支流),子代码与你的代码之间是互不影响的,可以都运行在一个进程中。

继承Thread类实现多线程

多线程的创建和启用

Thread类 

可以开任意多个线程!t3-tn!

为什么多次运行“------”的位置不一样?

同步就是严格按照代码的顺序执行的。

实现Runnable接口实现多线程

这个t-1,t-2名称的作用?可以观察多线程的异步!

两种实现线程的方式的区别于联系

接口的方法都是没有方法体的!继承是重写run方法,实现接口是实现run方法!

举例:多个线程可以共同一个接口实现类的对象。(比较用runnable!)

可以从结果中得出,开启的两个线程是共享了count资源。

Thread类的相关方法1

改名:

设置优先级

观察执行顺序:说明这只是一个概率!

Thread类的相关方法2

线程让步 

 插入,-----3被阻塞。

睡眠

强制 stop

线程的生命周期(线程从生到死的经历)

 

阻塞存疑?

线程的同步与死锁

提款方法,判断账户钱够不够 

模拟多线程

main方法

结果:多线程调用这个方法存在线程共享资源时,一个线程在执行这个方法没有完毕时,另一个线程又开始执行这个方法。

此时有个问题!修改此方法

新加drawing1()方法

变成两个对象,调用两个不同的方法。

此时还是会出现资源问题,变成-1000。

结论 :同步锁如果放在方法上,那么在第一个用该方法的进程会独占这个方法直到该方法运行完,这个时候下一个进程才能运行该方法。所以线程使用不同的对象执行此方法是,还是有资源共享的问题。

举例:变成静态方法后,所有对象就都使用同一个锁了。

 

Synchronized的使用方法

怎么锁代码块呢?新增drawing3()方法。

(静态方法可以用对象访问,即可以用实例化对象调用,只是不推荐,因为直接类名调用即可。)

用一个账户,都调用drawing3()方法。

结论:

不管是几个方法,都是使用的同一个同步锁,就是说如果有drawing4(),内容和3一样,两个对象分别调用两个方法,线程还是可以正常运行。

新问题:

又变成各跑各的了。

都用a对象,就一样了。

 

结论:

总结:

 

 

线程的通信

新需求

永远都是先执行支付宝

生产者与消费者

消费者

结果


发布了316 篇原创文章 · 获赞 96 · 访问量 11万+

猜你喜欢

转载自blog.csdn.net/weixin_31866177/article/details/104832089
今日推荐