欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程资源 > 编程问答 >内容正文

编程问答

线程2

发布时间:2025/6/17 编程问答 49 豆豆
生活随笔 收集整理的这篇文章主要介绍了 线程2 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

一,线程的生命周期

 

二,如何处理线程的安全问题:售票时重票,0号票 -1号票

  原因:一个线程再操作共享数据的时,未执行完,另外的线程参与进来,导致共享数据存在了安全问题。

  解决方法:java的同步机制:必须让一个线程操作共享数据完毕以后,其他进程才有机会参与共享数据

  • 方式一:同步代码块
public void hhh(){synchronized("同步监视器") {//需要被同步的代码块 }}class ticket implements Runnable{int ticket = 100;Object obj = new Object();@Overridepublic void run() {while (true) {synchronized(obj) {//这里obj也可以换成this if (ticket > 0) {try {sleep(10);} catch (InterruptedException e) {e.printStackTrace();}System.out.println(Thread.currentThread().getName() + ":" + ticket--);}}}}} public void hhh(){
synchronized("同步监视器") {
//需要被同步的代码块
}
}

同步监视器:任何类的对象都可以充当,哪个线程获取此监视器,谁就执行大括号里被同步的代码,俗称:锁。

  要求:所有线程必须共用一把锁。否则无效。

  注意:在实现Runable接口的方式中,考虑同步的话可以使用this来充当锁,但是在继承中,慎用this

  • 方式二:同步方法
class ticket implements Runnable{int ticket = 100;Object obj = new Object();@Overridepublic void run() {while (true) { // synchronized(obj) {//这里obj也可以换成this show(); // } }}public synchronized void show(){if (ticket > 0) {try {sleep(10);} catch (InterruptedException e) {e.printStackTrace();}System.out.println(Thread.currentThread().getName() + ":" + ticket--);}}}

将操作共享数据的方法声明为synchronized。即此方法为同步方法,能够保证当中一个线程执行此方法时,其他线程在外等待直至此线程执行完此方法。

--> 同步方法的 锁 :this。所以同步方法的多线程的实现一般用实现Runable接口的方式。

 

转载于:https://www.cnblogs.com/wsjun/p/9782433.html

总结

以上是生活随笔为你收集整理的线程2的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。