`
leichenlei
  • 浏览: 128836 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

java多线程、同步

    博客分类:
  • java
 
阅读更多

一、同步问题的发生

 

对属性i进行i++操作不是同步的。i是类属性(方法内的i不在堆内存)

它的动作分解为:

1,从堆内存读取到当前线程栈内存,保存副本ii。

2,ii+1

3,修改i为ii+1。

 

试想两个线程同时执行i++,就是如果i=1,那么i可能为1,2,3。

 

二、java的同步机制

 

synchronized(同步):同步锁,进入它包裹代码块之前,需要获得当前java对象的锁。对于上述过程,必须一个线程全部执行完3个步骤,另一个线程才能开始。

 

valotile(不稳定的):当使用被修饰变量时候,每要都从堆内存中读取,不要保存副本。

 

使用的两个条件:

对变量的写操作不依赖于当前值。

该变量没有包含在具有其他变量的不变式中。

 

atomic(原子):利用了valotile读堆内存的特性。上述执行第3个步骤前,再次读出堆中值和副本ii对比,看原值是否被改变。

 

三、线程池

 

线程池基础接口:   ExecutorService

基础接口的默认实现:ThreadPoolExecutor

 

java自带4中线程池(基于ThreadPoolExecutor):

 

1,Executors.newSingleThreadExecutor保持单个线程池

实现:

 public static ExecutorService newSingleThreadExecutor() {

        return new FinalizableDelegatedExecutorService

            (new ThreadPoolExecutor(1, 1,

                                    0L, TimeUnit.MILLISECONDS,

                                    new LinkedBlockingQueue<Runnable>()));

    }

2,Executors.newFixedThreadPool 保持固定个数线程池

实现:

public static ExecutorService newFixedThreadPool(int nThreads) {

        return new ThreadPoolExecutor(nThreads, nThreads,

                                      0L, TimeUnit.MILLISECONDS,

                                      new LinkedBlockingQueue<Runnable>());

    }

 

3,Executors.newCachedThreadPool 可缓存的线程池,执行0到Integer.MAX_VALUE个线程任务

实现:

new ThreadPoolExecutor(0, Integer.MAX_VALUE,

                                      60L, TimeUnit.SECONDS,

 

                                      new SynchronousQueue<Runnable>());

 

 

4,Executors.newScheduledThreadPool 定期任务线程池

实现(ScheduledThreadPoolExecutor):

super(corePoolSize, Integer.MAX_VALUE, 0, TimeUnit.NANOSECONDS,

              new DelayedWorkQueue());

分享到:
评论

相关推荐

    java 多线程同步

    Java多线程同步是Java编程中关键的并发概念,它涉及到如何在多个线程访问共享资源时保持数据的一致性和完整性。`java.util.concurrent`包是Java提供的一个强大的并发工具库,它为开发者提供了多种线程安全的工具,...

    Java多线程同步.pdf

    "Java多线程同步.pdf" Java多线程同步是指在Java语言中,如何使用synchronized关键字和其他同步机制来确保多线程程序的正确执行。在Java语言中,synchronized关键字用于对方法或者代码块进行同步,但是仅仅使用...

    Java多线程同步机制研究分析.pdf

    Java多线程同步机制研究分析 Java多线程同步机制是Java编程语言中的一种机制,它允许多个线程同时执行,提高了系统资源的利用率和安全性。但是,多线程中最重要的问题是线程的同步和共享资源的访问保护。本文通过对...

    基于Java多线程同步的安全性研究.pdf

    "基于Java多线程同步的安全性研究" 本文主要研究了基于Java多线程同步的安全性问题,讨论了Java多线程同步机制的实现方法和安全性问题的解决方法。文章首先介绍了Java多线程同步的必要性和重要性,然后讨论了Java多...

    Java多线程同步机制的应用分析.pdf

    "Java多线程同步机制的应用分析" Java多线程同步机制的应用分析是指在Java语言中,如何使用同步机制来保护临界区,以避免多线程之间的冲突和错误。该机制通过管程机制和同步语法来保护临界区,使得多线程可以安全...

    java多线程同步例子

    java多线程同步互斥访问实例,对于初学者或是温故而知新的同道中人都是一个很好的学习资料

    基于Java多线程同步技术的简易模拟售票系统实现.pdf

    根据给定文件的信息,本篇文档是关于Java多线程同步技术在简易模拟售票系统中的应用研究。文档详细介绍了多线程的概念、如何在Java中创建线程、线程同步技术以及如何利用这些技术来解决共享资源访问时的数据一致性...

    Java多线程同步具体实例讲解 .doc

    Java多线程同步是编程中一个非常重要的概念,特别是在并发编程和高并发系统设计中起到关键作用。在Java中,为了保证线程安全,避免数据竞争和不一致的状态,我们通常会使用同步机制来控制对共享资源的访问。本文将...

    Java多线程同步具体实例.doc

    Java多线程同步是编程中一个非常重要的概念,特别是在并发编程中,用于解决多个线程访问共享资源时可能引发的数据不一致问题。本实例通过一个简单的火车票售票系统来演示同步机制的应用。 在这个实例中,我们创建了...

    java 多线程 同步详解

    Java多线程同步详解 在Java编程中,多线程是一种常见的并发执行方式,它可以提高程序的执行效率,充分利用CPU资源。然而,多线程环境下数据的安全性问题不容忽视,这就引出了Java中的同步机制。本文将深入探讨Java...

    Java多线程同步机制在售票系统的实现

    ### Java多线程同步机制在售票系统的实现 #### 一、引言 随着计算机硬件的发展,多核处理器已经成为主流配置,这为多线程编程提供了更广阔的应用场景。多线程能够充分利用多核处理器的优势,提高程序的并发性和...

    Java多线程同步机制在网络售票系统中的应用.zip

    Java多线程同步机制在网络售票系统中的应用是一个关键的话题,特别是在高并发环境下,如网络售票系统,正确地处理多线程同步是确保数据一致性、避免资源竞争和死锁的重要手段。下面将详细介绍Java多线程同步机制以及...

    Java多线程同步问题的探究.pdf

    在探究Java多线程同步问题时,需要关注的关键知识点包括synchronized关键字的使用、JDK 5引入的java.util.concurrent.locks包下的锁机制、以及JDK 1.2中ThreadLocal类的使用。此外,了解JVM(Java虚拟机)在处理多...

    Java多线程同步问题分析.pdf

    Java多线程同步问题分析主要关注的是在并发环境中如何有效地管理共享资源,避免出现数据竞争和不一致性。在Java编程中,多线程是提升程序性能的重要手段,尤其是在服务器端应用和服务中。然而,当多个线程同时访问并...

    JAVA多线程同步机制及其应用.doc

    Java多线程同步机制及其应用是Java编程中至关重要的一环,尤其在开发高并发、高性能的应用程序时,理解并掌握这些机制是必不可少的。本文档详细介绍了Java中多线程的相关概念、创建方式、线程管理、同步机制以及一个...

    Java多线程同步具体实例讲解.doc

    Java多线程同步是Java并发编程中的核心概念,它用于解决多线程环境下资源的并发访问问题,确保数据的一致性和完整性。在这个实例中,我们看到一个简单的火车票售票系统,它展示了如何使用`synchronized`关键字来实现...

    Java多线程同步[定义].pdf

    Java多线程同步是软件开发中的重要概念,特别是在并发编程中。Java内置的`synchronized`关键字是实现线程同步的基础,它可以确保同一时间只有一个线程访问特定的代码块或方法,从而避免数据竞争和不一致的情况。然而...

    java多线程同步问题

    多线程注意:wait()方法的调用要有判定条件常用 while () obj.wait(timeout, nanos); ... // Perform action appropriate to condition } synchronized会影响共享数据,但对其他语句的执行不会有规律了!

Global site tag (gtag.js) - Google Analytics