Java多线程基础(并发、线程安全、同步、互斥)
2017-04-20 22:36
417 查看
Java多线程基础四(并发、线程安全、同步、互斥)
在学习Java编程时,会从别人口中听到或其他资料上看到并发、线程安全、同步、互斥等概念,专业术语可以使我们有更清晰的理解,但是也容易让人犯懵,因此专门对这些术语进行解读。
1.并发:
并发比较容易理解,即多个线程并发执行(一并发作),该并发为宏观上的并发,为一个时间段(非时间点)内多个线程可以认为同时执行。因为实际上我们知道多线程实际上是这多个线程抢夺唯一的CPU资源,谁拿到执行权,谁就开始执行,轮流使用CPU进行执行,每个时间点仍是只有一个线程执行。
2.同步:
同步在日常生活中理解为“一起”,在多线程中如果一个数据被多个线程同步(一起)操作时,出现数据混乱,则称为线程不同步,如下代码:
代码运行结果可自行测试
如上代码体现,run方法被四个线程同时执行时,发生了数据混乱。则说该方法被同步执行出错,即该方法不同步。
3.线程安全:
多个线程同时操作同一个数据进行操作时,会产生数据混乱的现象,即线程安全出问题。即如果代码发生同步问题,则多线程不安全。
4.互斥:
为解决上述问题,我们可以使用synchronized修饰需要同步的代码块、方法,达到线程安全的目的。使用synchronized修饰的代码块、方法会出现一个现象,即一个线程执行该方法时,为该方法上锁,其他线程不能执行这个方法指导当前线程执行完该方法。这种多个线程互相排斥执行同一段代码的现象为互斥。
在学习Java编程时,会从别人口中听到或其他资料上看到并发、线程安全、同步、互斥等概念,专业术语可以使我们有更清晰的理解,但是也容易让人犯懵,因此专门对这些术语进行解读。
1.并发:
并发比较容易理解,即多个线程并发执行(一并发作),该并发为宏观上的并发,为一个时间段(非时间点)内多个线程可以认为同时执行。因为实际上我们知道多线程实际上是这多个线程抢夺唯一的CPU资源,谁拿到执行权,谁就开始执行,轮流使用CPU进行执行,每个时间点仍是只有一个线程执行。
2.同步:
同步在日常生活中理解为“一起”,在多线程中如果一个数据被多个线程同步(一起)操作时,出现数据混乱,则称为线程不同步,如下代码:
package demo; /** * @author Jie */ public class TreadDemo { public static void main(String[] args) { TicketSell ticketSell = new TicketSell(); //Create 4 threads Thread t1 = new Thread(ticketSell); Thread t2 = new Thread(ticketSell); Thread t3 = new Thread(ticketSell); Thread t4 = new Thread(ticketSell); //Start these threads t1.start(); t2.start(); t3.start(); t4.start(); } } //Define the class of sell tickets class TicketSell implements Runnable{ private int ticket = 50;//Define the total number of tickets public void run(){ while(true){ if(ticket>0){ try { Thread.sleep(500); } catch (InterruptedException e) { e.printStackTrace(); } String threadName = Thread.currentThread().getName();//Get the name of thread at present System.out.println("线程"+threadName+"出售第"+ticket+"张票!"); ticket--; } } } }
代码运行结果可自行测试
如上代码体现,run方法被四个线程同时执行时,发生了数据混乱。则说该方法被同步执行出错,即该方法不同步。
3.线程安全:
多个线程同时操作同一个数据进行操作时,会产生数据混乱的现象,即线程安全出问题。即如果代码发生同步问题,则多线程不安全。
4.互斥:
为解决上述问题,我们可以使用synchronized修饰需要同步的代码块、方法,达到线程安全的目的。使用synchronized修饰的代码块、方法会出现一个现象,即一个线程执行该方法时,为该方法上锁,其他线程不能执行这个方法指导当前线程执行完该方法。这种多个线程互相排斥执行同一段代码的现象为互斥。
相关文章推荐
- Java基础-23总结多线程,线程实现Runnable接口,线程名字获取和设置,线程控制,线程安全,同步线程
- java基础——多线程(线程的同步互斥与通信)
- Java基础-23总结多线程,线程实现Runnable接口,线程名字获取和设置,线程控制,线程安全,同步线程
- java语言基础(91)——多线程(同步方法解决线程安全问题)
- java基础——多线程(线程的同步互斥与通信)
- JAVA多线程并发同步,以及线程终止
- .NET组件程序设计 第8章 多线程和并发管理 同步线程_互斥
- 黑马程序员:Java基础总结----多线程安全性&同步
- 多线程并发库高级应用 之 传统定时器、互斥、同步通信技术
- JAVA基础知识之java多线程时数据同步问题
- Java多线程1-安全性、互斥与同步
- (14)多线程与并发库之java5同步集合类的应用【包含jdk1.5新特性 ConcurrentHashMap】
- (14)多线程与并发库之java5同步集合类的应用【包含jdk1.5新特性 ConcurrentHashMap】
- java多线程并发(二)(线程基础)
- Java 并发——多线程基础
- 黑马程序员-JAVA基础-多线程的安全、同步与死锁
- Java多线程1-安全性、互斥与同步
- Java多线程1-安全性、互斥与同步
- 多线程并发库高级应用 之 使用java5中同步技术的3个面试题
- java 多线程基础--多线程及并发