E-COM-NET
首页
在线工具
Layui镜像站
SUI文档
联系我们
推荐频道
Java
PHP
C++
C
C#
Python
Ruby
go语言
Scala
Servlet
Vue
MySQL
NoSQL
Redis
CSS
Oracle
SQL Server
DB2
HBase
Http
HTML5
Spring
Ajax
Jquery
JavaScript
Json
XML
NodeJs
mybatis
Hibernate
算法
设计模式
shell
数据结构
大数据
JS
消息中间件
正则表达式
Tomcat
SQL
Nginx
Shiro
Maven
Linux
J.U.C
【死磕Java并发】-----
J.U.C
之Java并发容器:ConcurrentSkipListMap
原文出处http://cmsblogs.com/『chenssy』到目前为止,我们在Java世界里看到了两种实现key-value的数据结构:Hash、TreeMap,这两种数据结构各自都有着优缺点。Hash表:插入、查找最快,为O(1);如使用链表实现则可实现无锁;数据有序化需要显式的排序操作。红黑树:插入、查找为O(logn),但常数项较小;无锁实现的复杂性很高,一般需要加锁;数据天然有序。然
chenssy
·
2017-07-12 00:46
死磕Java
【死磕Java并发】-----
J.U.C
之Java并发容器:ConcurrentLinkedQueue
原文出处http://cmsblogs.com/『chenssy』要实现一个线程安全的队列有两种方式:阻塞和非阻塞。阻塞队列无非就是锁的应用,而非阻塞则是CAS算法的应用。下面我们就开始一个非阻塞算法的研究:CoucurrentLinkedQueue。ConcurrentLinkedQueue是一个基于链接节点的无边界的线程安全队列,它采用FIFO原则对元素进行排序。采用“wait-free”算法
chenssy
·
2017-07-08 21:56
【死磕Java并发】-----
J.U.C
之Java并发容器:ConcurrentLinkedQueue
原文出处http://cmsblogs.com/『chenssy』要实现一个线程安全的队列有两种方式:阻塞和非阻塞。阻塞队列无非就是锁的应用,而非阻塞则是CAS算法的应用。下面我们就开始一个非阻塞算法的研究:CoucurrentLinkedQueue。ConcurrentLinkedQueue是一个基于链接节点的无边界的线程安全队列,它采用FIFO原则对元素进行排序。采用“wait-free”算法
chenssy
·
2017-07-08 21:10
死磕Java
【死磕Java并发】-----
J.U.C
之ConcurrentHashMap红黑树转换分析
原文出处http://cmsblogs.com/『chenssy』在【死磕Java并发】—–
J.U.C
之Java并发容器:ConcurrentHashMap一文中详细阐述了ConcurrentHashMap
chenssy
·
2017-06-26 22:25
死磕Java
【死磕Java并发】-----
J.U.C
之Java并发容器:ConcurrentHashMap
此篇博客所有源码均来自JDK1.8HashMap是我们用得非常频繁的一个集合,但是由于它是非线程安全的,在多线程环境下,put操作是有可能产生死循环的,导致CPU利用率接近100%。为了解决该问题,提供了Hashtable和Collections.synchronizedMap(hashMap)两种解决方案,但是这两种方案都是对读写加锁,独占式,一个线程在读时其他线程必须等待,吞吐量较低,性能较为
chenssy
·
2017-06-20 22:02
死磕Java
浅析Java并发编程(四)java.util.concurrent
DougLea前言Java5是Java历史上非常重要的一个版本,它提供了泛型、for-each、自动装箱和拆箱、枚举、可变参数、静态导入、注解以及本文的主角java.util.concurrent包(后文简称为
J.U.C
简单的土豆
·
2017-06-13 19:46
【死磕Java并发】-----
J.U.C
之并发工具类:CountDownLatch
此篇博客所有源码均来自JDK1.8在上篇博客中介绍了Java四大并发工具之一的CyclicBarrier,今天要介绍的CountDownLatch与CyclicBarrier有点儿相似。CyclicBarrier所描述的是“允许一组线程互相等待,直到到达某个公共屏障点,才会进行后续任务",而CountDownLatch所描述的是”在完成一组正在其他线程中执行的操作之前,它允许一个或多个线程一直等待
chenssy
·
2017-06-11 19:25
【死磕Java并发】-----
J.U.C
之AQS:同步状态的获取与释放
此篇博客所有源码均来自JDK1.8在前面提到过,AQS是构建Java同步组件的基础,我们期待它能够成为实现大部分同步需求的基础。AQS的设计模式采用的模板方法模式,子类通过继承的方式,实现它的抽象方法来管理同步状态,对于子类而言它并没有太多的活要做,AQS提供了大量的模板方法来实现同步,主要是分为三类:独占式获取和释放同步状态、共享式获取和释放同步状态、查询同步队列中的等待线程情况。自定义子类使用
chenssy
·
2017-06-09 13:48
Map 综述(三):彻头彻尾理解 ConcurrentHashMap
摘要:ConcurrentHashMap是
J.U.C
(java.util.concurrent包)的重要成员,它是HashMap的一个线程安全的、支持高效并发的版本。
书呆子Rico
·
2017-05-27 17:10
Java
ABC
Java-容器
Java-并发编程
Java并发编程学习笔记
Java
SE
进阶之路
Java
Collection
Framework
源码剖析
【死磕Java并发】-----
J.U.C
之并发工具类:Exchanger
此篇博客所有源码均来自JDK1.8前面三篇博客分别介绍了CyclicBarrier、CountDownLatch、Semaphore,现在介绍并发工具类中的最后一个Exchange。Exchange是最简单的也是最复杂的,简单在于API非常简单,就一个构造方法和两个exchange()方法,最复杂在于它的实现是最复杂的(反正我是看晕了的)。在API是这么介绍的:可以在对中对元素进行配对和交换的线程
chenssy
·
2017-05-19 17:30
死磕Java
J.U.C
之AQS:CLH同步队列
此篇博客所有源码均来自JDK1.8在上篇博客【死磕Java并发】—–
J.U.C
之AQS:AQS简介中提到了AQS内部维护着一个FIFO队列,该队列就是CLH同步队列。
大林-Java
·
2017-05-16 18:37
Java
【死磕Java并发】-----
J.U.C
之并发工具类:Semaphore
此篇博客所有源码均来自JDK1.8信号量Semaphore是一个控制访问多个共享资源的计数器,和CountDownLatch一样,其本质上是一个“共享锁”。Semaphore,在API是这么介绍的:一个计数信号量。从概念上讲,信号量维护了一个许可集。如有必要,在许可可用前会阻塞每一个acquire(),然后再获取该许可。每个release()添加一个许可,从而可能释放一个正在阻塞的获取者。但是,不
chenssy
·
2017-05-03 18:09
死磕Java
【死磕Java并发】-----
J.U.C
之并发工具类:CountDownLatch
此篇博客所有源码均来自JDK1.8在上篇博客中介绍了Java四大并发工具一直的CyclicBarrier,今天要介绍的CountDownLatch与CyclicBarrier有点儿相似。CyclicBarrier所描述的是“允许一组线程互相等待,直到到达某个公共屏障点,才会进行后续任务”,而CountDownLatch所描述的是”在完成一组正在其他线程中执行的操作之前,它允许一个或多个线程一直等待
chenssy
·
2017-04-24 20:51
死磕Java
【死磕Java并发】-----
J.U.C
之并发工具类:CyclicBarrier
此篇博客所有源码均来自JDK1.8CyclicBarrier,一个同步辅助类,在API中是这么介绍的:它允许一组线程互相等待,直到到达某个公共屏障点(commonbarrierpoint)。在涉及一组固定大小的线程的程序中,这些线程必须不时地互相等待,此时CyclicBarrier很有用。因为该barrier在释放等待线程后可以重用,所以称它为循环的barrier。通俗点讲就是:让一组线程到达一个
chenssy
·
2017-04-13 18:41
死磕Java
【死磕Java并发】-----
J.U.C
之Condition
此篇博客所有源码均来自JDK1.8在没有Lock之前,我们使用synchronized来控制同步,配合Object的wait()、notify()系列方法可以实现等待/通知模式。在JavaSE5后,Java提供了Lock接口,相对于Synchronized而言,Lock提供了条件Condition,对线程的等待、唤醒操作更加详细和灵活。下图是Condition与Object的监视器方法的对比(摘自
chenssy
·
2017-04-05 18:53
死磕Java
【死磕Java并发】-----
J.U.C
之重入锁:ReentrantLock
此篇博客所有源码均来自JDK1.8ReentrantLock,可重入锁,是一种递归无阻塞的同步机制。它可以等同于synchronized的使用,但是ReentrantLock提供了比synchronized更强大、灵活的锁机制,可以减少死锁发生的概率。API介绍如下:一个可重入的互斥锁定Lock,它具有与使用synchronized方法和语句所访问的隐式监视器锁定相同的一些基本行为和语义,但功能更
chenssy
·
2017-03-26 21:18
死磕Java
【死磕Java并发】-----
J.U.C
之AQS:阻塞和唤醒线程
此篇博客所有源码均来自JDK1.8在线程获取同步状态时如果获取失败,则加入CLH同步队列,通过通过自旋的方式不断获取同步状态,但是在自旋的过程中则需要判断当前线程是否需要阻塞,其主要方法在acquireQueued():if(shouldParkAfterFailedAcquire(p,node)&&parkAndCheckInterrupt())interrupted=true;通过这段代码我们
chenssy
·
2017-03-23 21:19
死磕Java
【死磕Java并发】-----
J.U.C
之AQS:同步状态的获取与释放
此篇博客所有源码均来自JDK1.8在前面提到过,AQS是构建Java同步组件的基础,我们期待它能够成为实现大部分同步需求的基础。AQS的设计模式采用的模板方法模式,子类通过继承的方式,实现它的抽象方法来管理同步状态,对于子类而言它并没有太多的活要做,AQS提供了大量的模板方法来实现同步,主要是分为三类:独占式获取和释放同步状态、共享式获取和释放同步状态、查询同步队列中的等待线程情况。自定义子类使用
chenssy
·
2017-03-13 17:00
死磕Java
【死磕Java并发】-----
J.U.C
之AQS:CLH同步队列
此篇博客所有源码均来自JDK1.8在上篇博客【死磕Java并发】—–
J.U.C
之AQS:AQS简介中提到了AQS内部维护着一个FIFO队列,该队列就是CLH同步队列。
chenssy
·
2017-03-07 22:14
死磕Java
java 外部Tools-Executors|Semaphor|Exchanger|CyclicBarrier|CountDownLatch
先插一段JUC系列的文章来换换胃口,前面有文章大概介绍过JUC包含的东西,JUC体系包含的内容也是非常的多,不是一两句可以说清楚的,我这首先列出将会列举的JUC相关的内容,然后介绍本文的版本:Tools部分
J.U.C
dwj147258
·
2017-03-07 15:00
java
tools
线程池
java 外部Tools-Executors|Semaphor|Exchanger|CyclicBarrier|CountDownLatch
先插一段JUC系列的文章来换换胃口,前面有文章大概介绍过JUC包含的东西,JUC体系包含的内容也是非常的多,不是一两句可以说清楚的,我这首先列出将会列举的JUC相关的内容,然后介绍本文的版本:Tools部分
J.U.C
dwj147258
·
2017-03-07 15:00
java
tools
线程池
【死磕Java并发】-----
J.U.C
之AQS:AQS简介
Java的内置锁一直都是备受争议的,在JDK1.6之前,synchronized这个重量级锁其性能一直都是较为低下,虽然在1.6后,进行大量的锁优化策略(【死磕Java并发】—–深入分析synchronized的实现原理),但是与Lock相比synchronized还是存在一些缺陷的:虽然synchronized提供了便捷性的隐式获取锁释放锁机制(基于JVM机制),但是它却缺少了获取锁与释放锁的可
chenssy
·
2017-03-05 22:36
死磕Java
JAVA并发编程
J.U.C
学习总结
前言学习了一段时间
J.U.C
,打算做个小结,个人感觉总结还是非常重要,要不然总感觉知识点零零散散的。
风一样的码农
·
2016-07-06 23:00
进阶--java底层知识(4)--伪共享
尊重原创从我的前一篇博文中,我们知道了CPU缓存及缓存行的概念,同时用一个例子说明了编写单线程Java代码时应该注意的问题.下面我们讨论更为复杂,而且更符合现实情况的多核编程时将会碰到的问题.这些问题更容易犯,连
j.u.c
Mrzhoug
·
2016-05-06 13:00
java
伪共享
《深入浅出 Java Concurrency》目录
J.U.C
整体认识原子操作part1从AtomicInteger开始原子操作part2数组、引用的原子操作原子操作part3指令重排序与happens-before法则原子操作part4CAS操作锁机制
AlbertFly
·
2016-05-05 18:00
java并发系列:一线程常见问题
这篇是第一篇,跟线程有关基础概念,通常面试官会从线程基础概念问起,但是只知道这些基础概念是不够的,最终会问到并发编程的诸多问题:如java内存模型,各种锁、死锁,各种
j.u.c
下面的工具、线程池、线程安全等等
bohu83
·
2016-04-11 18:00
java学习-【转】JAVA并发类名图
http://flychao88.iteye.com/blog/2030521 ***********************原文结束,学习笔记开始********************** 这张图把
j.u.c
bohu83
·
2016-04-11 18:00
J.U.C
体系结构(java.util.concurrent)
之前一直都觉得
J.U.C
比较神秘,所以决定在好好的看看,后面就会结合每部分进行学习了。
DroidMind
·
2016-03-23 14:58
J.U.C
J.U.C
体系结构
之前一直都觉得
J.U.C
比较神秘,所以决定在好好的看看,所以在网上找了张图,很全面,后面就会结合每部分进行学习了。
hp910315
·
2016-03-23 14:00
java
j-u-c
【Java并发编程】—–“
J.U.C
”:ThreadPoolExecutor
前言在前面一节JDK线程池(一):体系结构中已经分析了JDK的线程池核心接口的组成,通过那些接口的描述,我们知道线程池它所提供的功能,而本文将围绕JDK中的线程池是如何具体实现这些功能展开分析。(PS:由于ThreadPoolExecutor的具体实现比较复杂,如果分析存在有误的地方,请拍砖!)本文将以如下内容作为大纲进行分析说明:ThreadPoolExcutor的核心组成任务的提交的执行流程分
Peter潘的博客
·
2016-03-16 04:54
【Java并发编程】—–“
J.U.C
”:ArrayBlockingQueue
前言本文的主要详细分析ArrayBlockingQueue的实现原理,由于该并发集合其底层是使用了java.util.ReentrantLock和java.util.Condition来完成并发控制的,我们可以通过JDK的源代码更好的学习这些并发控制类的使用,同时该类也是所有并发集合中最简单的一个,分析该类的源码也是为之后分析其他并发集合做好基础。1.Queue接口和BlockingQueue接口
Peter潘的博客
·
2016-03-05 18:50
JUC 目录
J.U.C
整体认识原子操作part1从AtomicInteger开始原子操作part2数组、引用的原子操作原子操作part3指令重排序与happens-before法则原子操作part4CAS操作锁机制
gavenlv
·
2016-02-20 22:00
【Java并发编程实战】—– AQS(四):CLH同步队列
在【Java并发编程实战】—–“
J.U.C
”:CLH队列锁提过,AQS里面的CLH队列是CLH同步锁的一种变形。其主要从两方面进行了改造:节点的结构与节点等待机制。
chenssy
·
2015-12-30 08:32
Java并发实战
Java并发编程
java并发
Java并发编程实战
【Java并发编程实战】—– AQS(四):CLH同步队列
在【Java并发编程实战】—–“
J.U.C
”:CLH队列锁提过,AQS里面的CLH队列是CLH同步锁的一种变形。其主要从两方面进行了改造:节点的结构与节点等待机制。
chenssy
·
2015-12-30 08:00
java并发
Java并发编程
Java并发实战
【Java并发编程实战】----- AQS(四):CLH同步队列
在【Java并发编程实战】—–“
J.U.C
”:CLH队列锁提过,AQS里面的CLH队列是CLH同步锁的一种变形。其主要从两方面进行了改造:节点的结构与节点等待机制。
chenssy
·
2015-12-30 08:00
【Java并发编程实战】-----“
J.U.C
”:AQS分析(二):获取锁、释放锁
上篇博客稍微介绍了一下AQS,下面我们来关注下AQS的所获取和锁释放。AQS锁获取AQS包含如下几个方法:acquire(intarg):以独占模式获取对象,忽略中断。acquireInterruptibly(intarg):以独占模式获取对象,如果被中断则中止。acquireShared(intarg):以共享模式获取对象,忽略中断。acquireSharedInterruptibly(inta
chenssy
·
2015-12-24 17:00
并发
java并发
Java并发编程
Java并发实战
【Java并发编程实战】-----“
J.U.C
”:AQS分析(一)
在前面博客中,LZ讲到了ReentrantLock、ReentrantReadWriteLock、Semaphore、CountDownLatch,他们都有各自获取锁的方法,同时相对于Java的内置锁,他们具有明显的优势:花最小的空间开销创建锁、最少的时间开销获得锁、使用更加方便灵活。参考Java的内置锁,对于JUC同步器而言,他应该具备两个最基本的功能:获取锁,释放锁。其中获取锁应该是先判断当前
chenssy
·
2015-12-17 17:01
Java并发编程实战
【Java并发编程实战】-----“
J.U.C
”:AQS分析(一)
在前面博客中,LZ讲到了ReentrantLock、ReentrantReadWriteLock、Semaphore、CountDownLatch,他们都有各自获取锁的方法,同时相对于Java的内置锁,他们具有明显的优势:花最小的空间开销创建锁、最少的时间开销获得锁、使用更加方便灵活。参考Java的内置锁,对于JUC同步器而言,他应该具备两个最基本的功能:获取锁,释放锁。其中获取锁应该是先判断当前
chenssy
·
2015-12-17 17:00
java并发
Java并发编程
Java并发实战
【Java并发编程实战】-----“
J.U.C
”:CLH队列锁
在前面介绍的几篇博客中总是提到CLH队列,在AQS中CLH队列是维护一组线程的严格按照FIFO的队列。他能够确保无饥饿,严格的先来先服务的公平性。下图是CLH队列节点的示意图:在CLH队列的节点QNode中包含有一个locked的字段,该字段表示该节点是否需要获取锁,为true表示需要获取,为false表示不需要获取。在CLH队列中,节点与节点之间并不是通过next指针来连接的而是通过myPred
chenssy
·
2015-12-10 09:55
Java并发编程实战
【Java并发编程实战】-----“
J.U.C
”:CLH队列锁
在前面介绍的几篇博客中总是提到CLH队列,在AQS中CLH队列是维护一组线程的严格按照FIFO的队列。他能够确保无饥饿,严格的先来先服务的公平性。下图是CLH队列节点的示意图:在CLH队列的节点QNode中包含有一个locked的字段,该字段表示该节点是否需要获取锁,为true表示需要获取,为false表示不需要获取。在CLH队列中,节点与节点之间并不是通过next指针来连接的而是通过myPred
chenssy
·
2015-12-10 09:00
java并发
Java并发编程
Java并发实战
【Java并发编程实战】-----“
J.U.C
”:CLH队列锁
在前面介绍的几篇博客中总是提到CLH队列,在AQS中CLH队列是维护一组线程的严格按照FIFO的队列。他能够确保无饥饿,严格的先来先服务的公平性。下图是CLH队列节点的示意图:在CLH队列的节点QNode中包含有一个locked的字段,该字段表示该节点是否需要获取锁,为true表示需要获取,为false表示不需要获取。在CLH队列中,节点与节点之间并不是通过next指针来连接的而是通过myPred
chenssy
·
2015-12-10 09:00
【Java并发编程实战】—–“
J.U.C
”:CAS操作
CAS,即CompareandSwap,中文翻译为“比较并交换”。对于JUC包中,CAS理论是实现整个java并发包的基石。从整体来看,concurrent包的实现示意图如下:i++是一个非常经典的操作,它几乎充斥着我们每个人编写的代码中。我们知道i++是可以分解的,它分解为getI()、i+1、setI三个步骤,所以它并不是原子操作。如果i==1,执行两次i++操作,我们期望的结果是3,但是结果
chenssy
·
2015-12-07 09:42
Java并发编程实战
【Java并发编程实战】—–“
J.U.C
”:CAS操作
CAS,即CompareandSwap,中文翻译为“比较并交换”。对于JUC包中,CAS理论是实现整个java并发包的基石。从整体来看,concurrent包的实现示意图如下:i++是一个非常经典的操作,它几乎充斥着我们每个人编写的代码中。我们知道i++是可以分解的,它分解为getI()、i+1、setI三个步骤,所以它并不是原子操作。如果i==1,执行两次i++操作,我们期望的结果是3,但是结果
chenssy
·
2015-12-07 09:00
java并发
Java并发编程
Java并发实战
【Java并发编程实战】-----“
J.U.C
”:CAS操作
CAS,即CompareandSwap,中文翻译为“比较并交换”。对于JUC包中,CAS理论是实现整个java并发包的基石。从整体来看,concurrent包的实现示意图如下:i++是一个非常经典的操作,它几乎充斥着我们每个人编写的代码中。我们知道i++是可以分解的,它分解为getI()、i+1、setI三个步骤,所以它并不是原子操作。如果i==1,执行两次i++操作,我们期望的结果是3,但是结果
chenssy
·
2015-12-07 09:00
【Java并发编程实战】-----“
J.U.C
”:Exchanger
前面介绍了三个同步辅助类:CyclicBarrier、Barrier、Phaser,这篇博客介绍最后一个:Exchanger。JDKAPI是这样介绍的:可以在对中对元素进行配对和交换的线程的同步点。每个线程将条目上的某个方法呈现给exchange方法,与伙伴线程进行匹配,并且在返回时接收其伙伴的对象。Exchanger可能被视为SynchronousQueue的双向形式。Exchanger可能在应
youxia0075454
·
2015-11-30 10:00
java
thread
多线程
并发
线程
【Java并发编程实战】—–“
J.U.C
”:Phaser
Phaser由java7中推出,是JavaSE7中新增的一个使用同步工具,在功能上面它与CyclicBarrier、CountDownLatch有些重叠,但是它提供了更加灵活、强大的用法。CyclicBarrier,允许一组线程互相等待,直到到达某个公共屏障点。它提供的await()可以实现让所有参与者在临界点到来之前一直处于等待状态。CountDownLatch,在完成一组正在其
youxia0075454
·
2015-11-30 10:00
java
thread
多线程
并发
线程
【Java并发编程实战】—–“
J.U.C
”:CountDownlatch
上篇博文LZ介绍了CyclicBarrier。CyclicBarrier所描述的是“允许一组线程互相等待,直到到达某个公共屏障点,才会进行后续任务”。而CountDownlatch和它也有一点点相似之处:CountDownlatch所描述的是“在完成一组正在其他线程中执行的操作之前,它允许一个或多个线程一直等待”。在JDKAPI中是这样阐述的:用给定的计数初始化CountDownLatch。由于调
youxia0075454
·
2015-11-30 10:00
java
thread
多线程
并发
线程
【Java并发编程实战】—–“
J.U.C
”:CyclicBarrier
在上篇博客中,LZ介绍了Semaphore,下面LZ介绍CyclicBarrier。在JDKAPI中是这么介绍的:一个同步辅助类,它允许一组线程互相等待,直到到达某个公共屏障点(commonbarrierpoint)。在涉及一组固定大小的线程的程序中,这些线程必须不时地互相等待,此时CyclicBarrier很有用。因为该barrier在释放等待线程后可以重用,所以称它为循环的b
youxia0075454
·
2015-11-30 10:00
java
thread
并发
线程
【Java并发编程实战】—–“
J.U.C
”:ReentrantReadWriteLock
ReentrantLock实现了标准的互斥操作,也就是说在某一时刻只有有一个线程持有锁。ReentrantLock采用这种独占的保守锁直接,在一定程度上减低了吞吐量。在这种情况下任何的“读/读”、“读/写”、“写/写”操作都不能同时发生。然而在实际的场景中我们就会遇到这种情况:有些资源并发的访问中,它大部分时间都是执行读操作,写操作比较少,但是读操作并不影响数据的一致性,如果在进行读操作
youxia0075454
·
2015-11-30 10:00
java
thread
并发
线程
【Java并发编程实战】—–“
J.U.C
”:Semaphore
信号量Semaphore是一个控制访问多个共享资源的计数器,它本质上是一个“共享锁”。Java并发提供了两种加锁模式:共享锁和独占锁。前面LZ介绍的ReentrantLock就是独占锁。对于独占锁而言,它每次只能有一个线程持有,而共享锁则不同,它允许多个线程并行持有锁,并发访问共享资源。独占锁它所采用的是一种悲观的加锁策略, 对于写而言为了避免冲突独占是必须的,但是对于读就没有必要了,因
youxia0075454
·
2015-11-30 10:00
java
thread
并发
线程
上一页
9
10
11
12
13
14
15
16
下一页
按字母分类:
A
B
C
D
E
F
G
H
I
J
K
L
M
N
O
P
Q
R
S
T
U
V
W
X
Y
Z
其他