1、使用多线程目的
通常是为了提高并发性,这就不可避免的出现了线程同步的问题。
2、并发
并发是指两个或多个事物在同一时间间隔内发生。简单的理解就是在同一段时间内发生了多个事情。
3、同步
同步中的同,不是同时的意思,而是指的协同、协调。同步中的步,指的是步骤、步调。合起来就是协同或协调步骤或步调。就是多个事物的步调遵循一定的规范,而不是混乱不堪的。
4、线程的并发和同步
在同一时间间隔内有多个线程在同时执行,就是线程的并发。
多个线程在逻辑上互有前因后果的关系,所以要对他们的执行顺序进行控制和协调,这就是线程同步。
系统为了提高性能和吞吐量,采用了多线程并发来解决,但同时也引入了线程同步的问题。可以这样理解线程并发和同步的因果关系。
如果线程在时间上能够区分开来,比如线程A先执行,在指定时间后,能够执行完毕或产生我们想要的结果,这时线程B使用线程A的结果作为输入开始执行。像这样通过时间能够严格的加以区分的不是特别复杂的线程关系,可以让线程休眠指定的时间来进行同步。就是采用sleep方法实现同步。
如果线程在时间上不能区分开,但是在先后顺序上能够区分开,比如线程A先执行,我们不知道它什么时候能够执行完,但是我们知道它必须执行完后线程B才能开始执行。像这样在执行的先后顺序上能够严格的区分开的,而起前一个执行完,后一个才开始的,可以使用join方法来实现同步。
如果线程的执行比较复杂,交织在一起,那么只能通过等待和通知,即wait和notify方法来实现线程的同步,采用这种方式能够更加灵活的控制线程的步调,但是如果使用不慎的话会容易导致更大的问题。具体采用哪种同步方式要根据实际情况。如果你的同步过于发杂的话,最好还是重新进行算法和逻辑的设计,因为只有良好的设计,才可能会出现巧妙的实现,最终成就健康稳定的运行。
5、同步和异步举例
同步(线程安全):A线程要请求某个资源,但是此资源正在被B线程使用中,因为同步机制存在,A线程请求
不到,怎么办,A线程只能等待下去
异步(非线程安全):A线程要请求某个资源,但是此资源正在被B线程使用中,因为没有同步机制存在,A线程仍然请求的到,A线程无需等待
相关推荐
Java-Thread-Affinity,将Java线程绑定到给定的内核.zip
java-thread.chm 多线程的学习以及例题
java-thread-sanitizer 的作用是为了在 ThreadSanitizer 上进行 Java 编程。补充:ThreadSanitizer 是一个检测数据竞争的工具(detects data races)。
java_Thread、 java_IO.zip
赠送jar包:transmittable-thread-local-2.12.1.jar; 赠送原API文档:transmittable-thread-local-2.12.1-javadoc.jar; 赠送源代码:transmittable-thread-local-2.12.1-sources.jar; 赠送Maven依赖信息文件:...
AndroidStudio连接数据库mariadb-java-client-2.2.6.jar 复制到工程目录,在右键add as lib即可, 必须new Thread(new Runnable() {新线程调用才能成功
【完整课程列表】 ...5-java_thread(1)线程(共18页).ppt 5-java_thread(2)线程(共29页).ppt 7-java_net(1)网络编程(共13页).ppt 7-java_net(2)网络编程(共25页).ppt 8-IO&线程总结(共7页).ppt
【完整课程列表】 ...5-java_thread(1)线程(共18页).ppt 5-java_thread(2)线程(共29页).ppt 7-java_net(1)网络编程(共13页).ppt 7-java_net(2)网络编程(共25页).ppt 8-IO&线程总结(共7页).ppt
Java-Thread-Affinity:将Java线程绑定到给定的内核
赠送jar包:transmittable-thread-local-2.12.2.jar; 赠送原API文档:transmittable-thread-local-2.12.2-javadoc.jar; 赠送源代码:transmittable-thread-local-2.12.2-sources.jar; 赠送Maven依赖信息文件:...
2022年RT-Thread全球技术大会国内专场PPT合集(31份)。 C RTOS中的RUST应用 CherryUSB协议栈的原理与使用 RISCV指令集开源软件生态 RNDIS设备驱动框架 RT-Thread 电源管理组件 RT-Thread 构建配置系统 RT-Thread ...
java多线程机制 PPT文档PPT文档
Java线程池的几种实现方法和区别介绍 使用:LinkedBlockingQueue实现线程池讲解
new Thread(new Runnable(){ @Override public void run() { try { Class.forName("com.mysql.jdbc.Driver"); //获取数据库连接对象url=jdbc:mysql://IPAddress:3306/DatabaseName connection= ...
Java并发编程---Thread类!!
Java多线程,进程与线程概念 创建和启动Java线程 线程状态和线程控制 多线程的互斥与同步 线程的通讯 死锁的概念
简单,你看看,好好看看我是生手,给点鼓励
一个java线程安全的单例模式:饥饿模式和延迟加载
赠送jar包:transmittable-thread-local-2.12.1.jar; 赠送原API文档:transmittable-thread-local-2.12.1-javadoc.jar; 赠送源代码:transmittable-thread-local-2.12.1-sources.jar; 赠送Maven依赖信息文件:...
对多线程进行了由浅入深的讲解,有丰富的实例让初学者更容易上手