概述
join方法
join方法是一条线程的运行插入到另一条线程之前的操作。
被插队的线程进入阻塞状态,插队线程运行完毕后阻塞取消。
同步运行: 多个线程存在先后顺序
异步运行: 多个线程并发运行
public class JoinDemo {
public static void main(String[] args) {
Thread dw = new Thread(){
@Override
public void run() {
System.out.println("开始下载");
for (int i =0;i<100;i++){
System.out.println("downloading"+i+"%");
try {
Thread.sleep(30);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
System.out.println("下载完毕");
}
};
Thread show = new Thread(){
@Override
public void run() {
System.out.println("show:开始显示文字");
try {
Thread.sleep(500);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("show:显示文字完毕");
System.out.println("show:等待图片下载完毕");
try {
dw.join();
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("show:开始显示图片");
System.out.println("show:图片显示完毕");
}
};
dw.start();
show.start();
}
}
- 多线程并发安全问题
当多个线程对同一个临界资源操作时,可能由于线程切换时机不确定导致。
程序和设计的执行方式出现混乱,从而引发程序业务错误甚至瘫痪。
临界资源:应该只能被单线程操作的资源。
public class SyncDemo {
public static void main(String[] args) {
Bank b = new Bank();
Thread alipay = new Thread(){
@Override
public void run() {
for (int i = 0;i<8;i++){
b.getMoney();
}
}
};
Thread wechat = new Thread(){
@Override
public void run() {
for (int i = 0;i<8;i++){
b.getMoney();
}
}
};
alipay.setName("支付宝");
wechat.setName("微信");
alipay.start();
wechat.start();
}
}
class Bank{
private int money = 37000;
public synchronized void getMoney() {
if (money>=5000){
System.out.println(Thread.currentThread().getName()+"成功取5000");
money-=5000;
}
System.out.println(Thread.currentThread().getName()+"银行还有"+money+"元");
}
}
从银行账户取钱
编写方法使用synchronized修饰,该方法称之为同步方法
多个线程不能同时运行这个方法内部的代码
临界资源就不会 同时被多个线程使用,解决了并发安全问题。
最后
以上就是爱撒娇冷风为你收集整理的java线程高级 - 插队方法,同步方法的全部内容,希望文章能够帮你解决java线程高级 - 插队方法,同步方法所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复