一、线程安全出现的原因
在使用多线程的时候,往往会出现线程安全的问题,我们直到一个共享数据是高育良可天下无贼影评以由多个线程一起操作的,但是当一个共享数据在被一个线程操作的过程中,操作未被执行完毕,而此时另一个线程参与进来操作该共享数据,就会导致共享数据存在安全问题
二、解决线程安全问题
如今解决线程安全问题的办法就是当共享数据被一个线程操作完毕后,才能允许其他线程进行操作,所以这浙江选考吧里有两个解决意念的力量线程安全问题的方法,一个是同步代码块,即给操作共享数据的代码加上一个锁(也叫同步监视器),另一个就是同步方法
三、实现线程安全的方法
1、锁(同步监视器)
synchronized (锁){
田凯 }
利用synchronized关键字就高清播放器可以给代码加上锁,该关键字后面的小括号内所放入的就是锁,锁可以是一个任意的类,但是所有线程必须共用一个锁。 下面是锁的使用的例子:
二、同步方法
同步方法与同步代码块不同的地方就是将子线程要允许的代码放到一个方法中,在该方法的名字前面加上sync东德国歌hronized关键字即可,在这里默认的锁为this,所以,通过继承Thread类创建的多线程是不能够使用同步方法的。 具体使用方法如下:
三、死锁问题
在敲代码的时候应该避免死锁。比如:线程1获得锁1然后线程1在获得锁2然后让乔治梅森大学线程1释放对锁1和锁2的占用,然后线程变色眼镜片2去获得
示例代码:
new Thre厦门城市大学ad(new Runnable() { @Override public void run() { synchronized (lock1){路尚 System.out.printl基金净值估算n(Thread.currentThread().getName()+"拿到了锁1"); try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println(Thread.currentThread().getName()+"等待锁2"); sync电子词典品牌hronized(lock2){ 应付职工薪酬 System.out.println(Thread.currentThread().getName()+"拿到了锁2"); } } }},"线程1").start();new Thread(new Runnable() { @Override public void run() { synchronized (lock1){ System.out.println(Thread.currentThread().getName()+"拿到了锁2"); try { Thread.sleep(1000); } catch (InterruptedException e) { 高校推广 e.printStackTrace(); } System.out.println(Thread.currentThread().getName()+"等待锁1"); 西安变频器维修synchronized(lock2){ System.out.p海口车展rintln(Thread.currentThread().getName()+"拿到了锁1"); endnote } } }},"线程2服务蓝图4;).start();
解开锁的运行效果,线程1和线程2厦门游玩攻略逐一运行并释放锁死锁的运行效果,线程1和线程2同时运行获得锁死锁产生的原因就是不同的线程都占用着对方需要的同步资源不放弃,都在等待对方释放自己需要的同步资源,从而形成了死锁。
本文发布于:2023-06-04 07:18:04,感谢您对本站的认可!
本文链接:http://www.ranqi119.com/ge/85/214380.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |