文章标题

大家说的多,而很多很多新手不太理解的一个线程的同步与异步,今天总结下。
一个程序一般是一个进程,而我们有时候程序要求多线程(thread)。什么是多线程呢?学习过线程的同学应该都记得 建立一个线程的两个方法,

  1. 第一:就是MyThread继承系统的Thread 实现run方法,在创建的时候是直接new MyThread(),然后通过调用
    该线程子类的.start(),方法启动。这个有一个问题就是当你的 MyThread这个类还需要继承别的抽象类或者别的类的时候就不行了。
  2. 第二:就是实现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");
                   }

接下来的这个方案是叫**

ThreadLocal

大家很可能觉得这个叫本地线程,其实他并不是一个线程,而只是线程的一个属性,每一个线程都会的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值