JAVA高并发程序设计(一)

简介: 一、同步(Synchronous)和异步(Asynchronous)          同步和异步通常用来形容一次方法调用,同步方法,调用者必须等到方法调用返回后,才能继续后续的行为,异步方法调用会立即返回,调用者就可以继续后续的操作,二、并发和并行         并发和并行都可以表示两个或多个任务一起执行,但偏重点点不同,并发偏重于多个任务交替执行,而多个任务之间有可能还是串行的。

一、同步(Synchronous)和异步(Asynchronous)

          同步和异步通常用来形容一次方法调用,同步方法,调用者必须等到方法调用返回后,才能继续后续的行为,异步方法调用会立即返回,调用者就可以继续后续的操作,


1240

二、并发和并行 

        并发和并行都可以表示两个或多个任务一起执行,但偏重点点不同,并发偏重于多个任务交替执行,而多个任务之间有可能还是串行的。而并行是真正意义上的“同时执行”。


1240

三、阻塞(Blocking)和非阻塞(Non-Blocking)

        一个线程占用了临界资源,那么其他所有需要这个资源的线程就必须在这个临界区中进行等待,等待会导致线程挂起,这种情况就是阻塞,非阻塞的意思与之相反。

四、线程的状态 


1240
线程的状态 

1、线程的启动是调用start()方法,而不是run()方法。

2、线程的终止、不用stop()是因为stop()方法太过暴力,强行把执行到一半的线程终止,可能会引起数据不一致的问题,一般我们定义一个线程终止的方法,告知线程何时停止即可。

3、线程中断:线程中断并不会使线程立即退出,而是给线程发一个通知,告知目标线程,有人希望你退出,至于目标线程接到通知后如何处理,则完全由目标线程自行决定。与线程中断的有三个方法

Thread.interrupt(): // 中断线程

Thread.isInterrupted()://判断是否中断

Thread.Interrupted():// 判断是否中断,并清除当前中断状态

注:Thread.sleep()方法会抛出一个InterruptedException中断异常,这不是运行时异常,也就是说程序必须捕获并处理它。当线程在休眠时,如果被中断,这个异常会产生。 

4、等待(wait)和通知(notify) 注:这两个方法是在Object类中的,意味着任何对象都可以调用这两个方法。

obj.wait()方法,线程会停止继续执行,转为等待状态,直到其他线程调用obj.notify()方法为止。调用object.wait()方法,就会进入object对象的等待队列,当调用object.notify()时,会从这个等待队列中,随机选择一个线程,并将其唤醒,这个选择是不公平的,完全是随机的。notifyAll()会唤醒等待队列里的所有线程,而不是随机选择一个线程。

5、挂起(suspend)和继续执行(resume)线程

    suspend与resume是一组相反的操作,调用suspend方法后的线程,必须等到resume方法调用后,才能继续执行。

注:此方法已经被废弃,并不推荐使用,因为suspend()在导致线程暂停的同时,并不会去释放任何资源。此  时,若其他任何线程想要访问被它暂用的锁时,都会被牵连,导致无法正常继续运行。同时,若resume()方法在suspend()前就执行了,那么被suspend()方法挂起的线程,很难有机会被继续执行,更为严重的是,它所占用的锁不会被释放,可能导致整个系统工作不正常。同时,对于被挂起的线程,从线程状态上看,还是Runnable,会严重影响我们的判断。

6、等待线程结束(join)和谦让(yield)

   join有两种情况:

Thread.join() 表示它会一直阻塞当前线程,直到目标线程执行完毕。

Thread.join(millis) 给出了最大等待时间,单位毫秒,如果超过给定时间目标线程还在执行,当前线程也会因为“等不及”,而继续下执行。

  Thread.yield()它会使当前线程让出CPU,

注意:调用Thread.yield()方法后,线程只是会让CPU,但并不代表当前线程不执行,当前线程还是会参与CPU的争夺。

目录
相关文章
|
2月前
|
Java
JAVA结构化程序设计
JAVA结构化程序设计
17 0
|
2月前
|
安全 Java 数据库连接
【Java每日一题】— —第三十一题:银行账号管理程序设计
【Java每日一题】— —第三十一题:银行账号管理程序设计
217 1
|
2月前
|
安全 Java 数据库连接
【Java每日一题】——第三十题:班级管理程序设计
【Java每日一题】——第三十题:班级管理程序设计
71 0
|
2月前
|
安全 Java 数据库连接
【Java每日一题】——第二十九题:超市购物程序设计
【Java每日一题】——第二十九题:超市购物程序设计
138 0
【Java每日一题】——第二十九题:超市购物程序设计
|
2月前
|
Java 物联网 测试技术
Java面向对象程序设计3面向对象基础
Java面向对象程序设计3面向对象基础
173 0
|
11天前
|
IDE Java 开发工具
基于Java程序设计的实验教学方法优化与实践
基于Java程序设计的实验教学方法优化与实践
21 1
|
25天前
|
缓存 负载均衡 Java
Java高并发性能指标
Java高并发是指在Java编程环境中,系统能够同时处理大量并发请求或操作的能力。这里的“高”强调的是并发处理的数量级较大,需要系统能够有效地管理多个并发的执行单元,如线程或进程,以确保它们能够高效且正确地执行。
13 0
|
1月前
|
JavaScript Java 测试技术
基于Java的程序设计实践项目管理系统的设计与实现(源码+lw+部署文档+讲解等)
基于Java的程序设计实践项目管理系统的设计与实现(源码+lw+部署文档+讲解等)
29 0
|
1月前
|
JavaScript Java 测试技术
基于Java的高并发慕课网的设计与实现(源码+lw+部署文档+讲解等)
基于Java的高并发慕课网的设计与实现(源码+lw+部署文档+讲解等)
26 2
|
1月前
|
Java
Java程序设计中的异常处理技巧
异常处理是Java程序设计中不可或缺的重要部分。本文将探讨Java中异常处理的基本概念,介绍常见的异常类型及其处理技巧,以及如何优化异常处理代码,提高程序的健壮性和可维护性。通过学习本文,读者将能够更好地理解和应用异常处理机制,写出更加稳健的Java程序。