线程的同步异步,以及具体代码实现,使用场景

来源:互联网 发布:淘宝申请介入会退款吗 编辑:程序博客网 时间:2024/05/21 10:33

大家说的多,而很多很多新手不太理解的一个线程的同步与异步,今天总结下。

一个程序一般是一个进程,而我们有时候程序要求多线程(thread)。什么是多线程呢?学习过线程的同学应该都记得 建立一个线程的两个方法,

第一:就是MyThread继承系统的Thread 实现run方法,在创建的时候是直接new  MyThread(),然后通过调用

该线程子类的.start(),方法启动。这个有一个问题就是当你的
MyThread这个类还需要继承别的抽象类或者别的类的时候就不行了。

第二:就是实现Runable 接口,注意这个是接口哈,java中一个类可以实现多个接口,这点是和第一种区别之处,

也是为啥大家都推荐使用这种。也是MyThrad  实现Runable
接口的run(),调用的地方和第一种操作有点点不一样,new Thread(new MyThread())  ,调用也一样的。






 

 

 

 

 

啰嗦了半天线程的操作,回归正题吧。

什么叫同步?  什么叫异步?无论同步还是异步,都必须是多线程,也就是再您的代码里使用了new Thread().

假设现在程序主线程我们叫他A ,而 你在你的代码里新建了一个线程B, 和一个线程C 。 在A中你先启动B  在启动C  ,

如果当前规定线程同步,那么无论是线程A 启动B 之后必须等待B执行完毕,再往下执行。执行到C  ,仍旧是需要等C执行完毕之后再回归到

主线程继续往下执行。  这个就是线程同步,他安全,但是往往用户体验不好,当B 、或者C 是一个比较耗时的操作的时候,A就一直等待,特别是

如果主线程主要是显示界面变化的线程的时候,界面在这种情况下会出现卡顿的情况。


什么叫异步呢?  我们前面提出的ABC  命名假设还是成立。

在异步机制下,当A线程中启动了B ,之后A会继续往下执行,B呢也会执行,如果CUP是分给B 那么B就在执行,分给了A  ,那么A就在执行。

然后A又启动一个C线程,C也会一起排队等待分配CUP运行,如此一旦ABC  三个线程需要访问到同一段代码,特别如意混用了代码中的数据,导致安全性能问题。


到现在为止相信大家对于同步异步都有一定了解,那么在我们实际代码中怎么样让程序同步,如何又允许异步呢?

如何操作呢?

一般有两个方法  方法同步,代码块同步

方法的同步介绍:synchronized只能标记非抽象的方法

public synchronized void oper(int x) { 
                       } 

 

代码块的同步介绍:

lock  是一个任意对象,一般使用this 即可

synchronized (lock) {                       System.out.print("Synchronize");                       System.out.println("Code");                   }


0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 成都地铁上掉东西了怎么办 地铁站丢了东西怎么办 在地铁站丢了东西怎么办 没有签劳动合同不发工资怎么办 没有劳动合同辞职不给工资怎么办 地铁安检要交押金怎么办 在广州地铁上人走丢了怎么办 海尔全自动洗衣机程系乱了怎么办 河南危险化学品经营许可证怎么办 甲方不给付监理费怎么办 甲方不按合同付工程款怎么办 撞车对方全责不赔钱怎么办 电梯坏了没人修怎么办 电工超作证丢了怎么办 设计师直接找电梯厂家怎么办 研究生补助申请期限过了怎么办 我的电脑图标没了怎么办 苹果锁频密码忘了怎么办 孕妇被降职降薪怎么办 公司降职降薪员工不同意怎么办 企业因为经营不善要降薪该怎么办 调岗不降薪我该怎么办? 怀孕后强制调岗怎么办 有限公司法人变更后债务怎么办 有限公司法人跑路债务怎么办 网上买票身份信息待核验怎么办 微信买票身份核验失败怎么办 买高铁票待核验怎么办 网上购票身份待核验怎么办 b站稿件版权原因怎么办 已离职老板打电话说账有问题怎么办 开到应急刹车道怎么办 自动挡的车刹车失灵怎么办 自动挡的车如果刹车失灵怎么办 手动挡汽车刹车失灵怎么办 车辆没有年检出了交通事故怎么办 跟着大货车闯了红灯怎么办 在万家金服买的电子产品坏了怎么办 汽车被油笔画了怎么办? 挂到别人车跑了怎么办 浪琴手表保修卡掉了怎么办