上一页 1 ··· 40 41 42 43 44 45 46 47 48 ··· 55 下一页
摘要: CAS 是 compare and swap 的缩写,即我们所说的比较交换。 cas 是一种基于锁的操作,而且是乐观锁。在 java 中锁分为乐观锁和悲观锁。悲观锁是将资源锁住,等一个之前获得锁的线程释放锁之后,下一个线程才可以访问。而乐观锁采取了一种宽泛的态度,通过某种方式不加锁来处理资源,比如通 阅读全文
posted @ 2020-06-08 00:33 咔啡 阅读(3214) 评论(0) 推荐(0)
摘要: 我们可以使用 Thread 类的 Sleep()方法让线程暂停一段时间。需要注意的是,这并不会让线程终止,一旦从休眠中唤醒线程,线程的状态将会被改变为 Runnable,并且根据线程调度,它将得到执行。 阅读全文
posted @ 2020-06-08 00:28 咔啡 阅读(258) 评论(0) 推荐(0)
摘要: 不可变对象指对象一旦被创建,状态就不能再改变。任何修改都会创建一个新的对象,如 String、Integer 及其它包装类。 详情参见答案,一步一步指导你在 Java中创建一个不可变的类。 阅读全文
posted @ 2020-06-08 00:27 咔啡 阅读(431) 评论(0) 推荐(0)
摘要: 1、继承 Thread 类创建线程类 2、通过 Runnable 接口创建线程类 3、通过 Callable 和 Future 创建线程 4、通过线程池创建 阅读全文
posted @ 2020-06-08 00:25 咔啡 阅读(84) 评论(0) 推荐(0)
摘要: Semaphore 就是一个信号量,它的作用是限制某段代码块的并发数。Semaphore 有一个构造函数,可以传入一个 int 型整数 n,表示某段代码最多只有 n 个线程可 以访问,如果超出了 n,那么请等待,等到某个线程执行完毕这段代码块,下一个 线程再进入。由此可以看出如果 Semaphore 阅读全文
posted @ 2020-06-08 00:05 咔啡 阅读(465) 评论(0) 推荐(0)
摘要: CopyOnWriteArrayList(免锁容器)的好处之一是当多个迭代器同时遍历和修改这 个列表时,不会抛出 ConcurrentModificationException。在 CopyOnWriteArrayList 中,写入将导致创建整个底层数组的副本,而源数组将保 留在原地,使得复制的数组 阅读全文
posted @ 2020-06-08 00:02 咔啡 阅读(1144) 评论(0) 推荐(0)
摘要: 是值传递。Java 语言的方法调用只支持参数的值传递。当一个对象实例作为一个 参数被传递到方法中时,参数的值就是对该对象的引用。对象的属性可以在被调 用过程中被改变,但对对象引用的改变是不会影响到调用者的。C++和 C#中可以 通过传引用或传输出参数来改变传入的参数的值。在 C#中可以编写如下所示的 阅读全文
posted @ 2020-06-07 23:53 咔啡 阅读(803) 评论(0) 推荐(0)
摘要: ConcurrentHashMap 的并发度就是 segment 的大小,默认为 16,这意味着最多同时可以有 16 条线程操作 ConcurrentHashMap,这也是ConcurrentHashMap 对 Hashtable 的最大优势,任何情况下,Hashtable 能同时有两条线程获取 H 阅读全文
posted @ 2020-06-07 23:39 咔啡 阅读(1758) 评论(0) 推荐(0)
摘要: 通常我们定义一个基本数据类型的变量,一个对象的引用,还有就是函数调用的 现场保存都使用 JVM 中的栈空间;而通过 new 关键字和构造器创建的对象则放在 堆空间,堆是垃圾收集器管理的主要区域,由于现在的垃圾收集器都采用分代收 集算法,所以堆空间还可以细分为新生代和老生代,再具体一点可以分为 Ede 阅读全文
posted @ 2020-06-07 23:36 咔啡 阅读(783) 评论(0) 推荐(0)
摘要: 这里区分一下: 1、如果使用的是无界队列 LinkedBlockingQueue,也就是无界队列的话,没关 系,继续添加任务到阻塞队列中等待执行,因为 LinkedBlockingQueue 可以近乎 认为是一个无穷大的队列,可以无限存放任务 2、如果使用的是有界队列比如 ArrayBlocking 阅读全文
posted @ 2020-06-07 23:25 咔啡 阅读(9132) 评论(0) 推荐(0)
摘要: ThreadLocal 是 Java 里一种特殊的变量。每个线程都有一个 ThreadLocal 就是每个线程都拥有了自己独立的一个变量,竞争条件被彻底消除了。它是为创建代价高昂的对象获取线程安全的好方法,比如你可以用 ThreadLocal 让SimpleDateFormat 变成线程安全的,因为 阅读全文
posted @ 2020-06-07 23:21 咔啡 阅读(981) 评论(0) 推荐(0)
摘要: Executors 工具类的不同方法按照我们的需求创建了不同的线程池,来满足业务 的需求。 Executor 接口对象能执行我们的线程任务。 ExecutorService 接口继承了 Executor 接口并进行了扩展,提供了更多的方法我 们能获得任务执行的状态并且可以获取任务的返回值。 使用 T 阅读全文
posted @ 2020-06-07 23:13 咔啡 阅读(1185) 评论(0) 推荐(0)
摘要: 当一个线程需要调用对象的 wait()方法的时候,这个线程必须拥有该对象的锁,接 着它就会释放这个对象锁并进入等待状态直到其他线程调用这个对象上的 notify() 方法。同样的,当一个线程需要调用对象的 notify()方法时,它会释放这个对象的 锁,以便其他在等待的线程就可以得到这个对象锁。由于 阅读全文
posted @ 2020-06-07 23:11 咔啡 阅读(1220) 评论(0) 推荐(0)
摘要: ThreadLocal 是一个本地线程副本变量工具类。主要用于将私有线程和该线程存放的副本对象做一个映射,各个线程之间的变量互不干扰,在高并发场景下,可以实现无状态的调用,特别适用于各个线程依赖不通的变量值完成操作的场景。简单说 ThreadLocal 就是一种以空间换时间的做法,在每个 Threa 阅读全文
posted @ 2020-06-07 23:08 咔啡 阅读(1562) 评论(0) 推荐(0)
摘要: CyclicBarrier 可以重复使用,而 CountdownLatch 不能重复使用。 Java 的 concurrent 包里面的 CountDownLatch 其实可以把它看作一个计数器, 只不过这个计数器的操作是原子操作,同时只能有一个线程去操作这个计数器, 也就是同时只能有一个线程去减这 阅读全文
posted @ 2020-06-07 23:05 咔啡 阅读(263) 评论(0) 推荐(0)
摘要: 当一个线程进入 wait 之后,就必须等其他线程 notify/notifyall,使用 notifyall,可 以唤醒所有处于 wait 状态的线程,使其重新进入锁的争夺队列中,而 notify 只能 唤醒一个。 如果没把握,建议 notifyAll,防止 notigy 因为信号丢失而造成程序异常 阅读全文
posted @ 2020-06-07 22:50 咔啡 阅读(1033) 评论(0) 推荐(0)
摘要: 修饰符 当前类 同 包 子 类 其他包 public √ √ √ √ protecte d √ √ √ × default √ √ × × private √ × × × 类的成员不写访问修饰时默认为 default。默认对于同一个包中的其他类相当于公 开(public),对于不是同一个包中的其他类 阅读全文
posted @ 2020-06-07 22:44 咔啡 阅读(523) 评论(0) 推荐(0)
摘要: ConcurrentHashMap 把实际 map 划分成若干部分来实现它的可扩展性和线程安 全。这种划分是使用并发度获得的,它是 ConcurrentHashMap 类构造函数的一 个可选参数,默认值为 16,这样在多线程情况下就能避免争用。 在 JDK8 后,它摒弃了 Segment(锁段)的概 阅读全文
posted @ 2020-06-07 21:23 咔啡 阅读(1293) 评论(0) 推荐(0)
摘要: 在 MyISAM Static 上的所有字段有固定宽度。动态 MyISAM 表将具有像 TEXT, BLOB 等字段,以适应不同长度的数据类型。 MyISAM Static 在受损情况下更容易恢复。 阅读全文
posted @ 2020-06-07 21:21 咔啡 阅读(520) 评论(0) 推荐(0)
摘要: 一个很明显的原因是 JAVA 提供的锁是对象级的而不是线程级的,每个对象都有 锁,通过线程获得。由于 wait,notify 和 notifyAll 都是锁级别的操作,所以把他 们定义在 Object 类中因为锁属于对象。 阅读全文
posted @ 2020-06-07 21:09 咔啡 阅读(787) 评论(0) 推荐(0)
摘要: 它用来压缩 MyISAM 表,这减少了磁盘或内存使用。 阅读全文
posted @ 2020-06-07 20:49 咔啡 阅读(185) 评论(0) 推荐(0)
摘要: 1、CHAR 和 VARCHAR 类型在存储和检索方面有所不同 2、CHAR 列长度固定为创建表时声明的长度,长度值范围是 1 到 255 当 CHAR 值被存储时,它们被用空格填充到特定长度,检索 CHAR 值时需删除尾随空格。 阅读全文
posted @ 2020-06-07 20:34 咔啡 阅读(198) 评论(0) 推荐(0)
摘要: interrupt interrupt 方法用于中断线程。调用该方法的线程的状态为将被置为”中断”状态。 注意:线程中断仅仅是置线程的中断状态位,不会停止线程。需要用户自己去监 视线程的状态为并做处理。支持线程中断的方法(也就是线程中断后会抛出 interruptedException 的方法)就是 阅读全文
posted @ 2020-06-07 19:33 咔啡 阅读(609) 评论(0) 推荐(0)
摘要: SynchronizedMap 一次锁住整张表来保证线程安全,所以每次只能有一个线程来 访为 map。 ConcurrentHashMap 使用分段锁来保证在多线程下的性能。 ConcurrentHashMap 中则是一次锁住一个桶。ConcurrentHashMap 默认将 hash 表分为 16 阅读全文
posted @ 2020-06-07 16:47 咔啡 阅读(379) 评论(0) 推荐(0)
摘要: 使用共享变量的方式 在这种方式中,之所以引入共享变量,是因为该变量可以被多个执行相同任务的 线程用来作为是否中断的信号,通知中断线程的执行。 使用 interrupt 方法终止线程 如果一个线程由于等待某些事件的发生而被阻塞,又该怎样停止该线程呢?这种 情况经常会发生,比如当一个线程由于需要等候键盘 阅读全文
posted @ 2020-06-07 16:46 咔啡 阅读(518) 评论(0) 推荐(0)
摘要: Java 中的 Semaphore 是一种新的同步类,它是一个计数信号。从概念上讲,从 概念上讲,信号量维护了一个许可集合。如有必要,在许可可用前会阻塞每一个 acquire(),然后再获取该许可。每个 release()添加一个许可,从而可能释放一个 正在阻塞的获取者。但是,不使用实际的许可对象, 阅读全文
posted @ 2020-06-07 16:45 咔啡 阅读(555) 评论(0) 推荐(0)
摘要: 在上下文切换过程中,CPU 会停止处理当前运行的程序,并保存当前程序运行的 具体位置以便之后继续运行。 从这个角度来看,上下文切换有点像我们同时阅读几本书,在来回切换书本的同时我们需要记住每本书当前读到的页码。在程序中, 上下文切换过程中的“页码”信息是保存在进程控制块(PCB)中的。 PCB 还经 阅读全文
posted @ 2020-06-07 16:44 咔啡 阅读(1159) 评论(0) 推荐(0)
摘要: 继承 Thread 类 实现 Runnable 接口 实现 Callable 接口,需要实现的是 call() 方法 阅读全文
posted @ 2020-06-07 16:43 咔啡 阅读(289) 评论(0) 推荐(0)
摘要: 线程安全是编程中的术语,指某个函数、函数库在多线程环境中被调用时,能够 正确地处理多个线程之间的共享变量,使程序功能正确完成。 Servlet 不是线程安全的,servlet 是单实例多线程的,当多个线程同时访问同一个 方法,是不能保证共享变量的线程安全性的。 Struts2 的 action 是多 阅读全文
posted @ 2020-06-07 16:42 咔啡 阅读(263) 评论(0) 推荐(0)
摘要: 线程调度器是一个操作系统服务,它负责为 Runnable 状态的线程分配 CPU 时间。 一旦我们创建一个线程并启动它,它的执行便依赖于线程调度器的实现。 同上一个问题,线程调度并不受到 Java 虚拟机控制,所以由应用程序来控制它是 更好的选择(也就是说不要让你的程序依赖于线程的优先级)。 时间分 阅读全文
posted @ 2020-06-07 16:41 咔啡 阅读(325) 评论(0) 推荐(0)
摘要: 如果异常没有被捕获该线程将会停止执行。Thread.UncaughtExceptionHandler 是用于处理未捕获异常造成线程突然中断情况的一个内嵌接口。当一个未捕获异 常将造成线程中断的时候 JVM 会使用 Thread.getUncaughtExceptionHandler() 来查询线程的 阅读全文
posted @ 2020-06-07 16:40 咔啡 阅读(365) 评论(0) 推荐(0)
摘要: 很多 synchronized 里面的代码只是一些很简单的代码,执行时间非常快,此时等 待的线程都加锁可能是一种不太值得的操作,因为线程阻塞涉及到用户态和内核 态切换的问题。既然 synchronized 里面的代码执行得非常快,不妨让等待锁的线 程不要被阻塞,而是在 synchronized 的边 阅读全文
posted @ 2020-06-07 16:37 咔啡 阅读(527) 评论(0) 推荐(0)
摘要: Java 的每个对象中都有一个锁(monitor,也可以成为监视器) 并且 wait(),notify() 等方法用于等待对象的锁或者通知其他线程对象的监视器可用。在 Java 的线程中 并没有可供任何对象使用的锁和同步器。这就是为什么这些方法是 Object 类的一 部分,这样 Java 的每一个 阅读全文
posted @ 2020-06-07 16:36 咔啡 阅读(417) 评论(0) 推荐(0)
摘要: 读写锁是用来提升并发程序性能的锁分离技术的成果。 阅读全文
posted @ 2020-06-07 16:35 咔啡 阅读(210) 评论(0) 推荐(0)
摘要: 最大的不同是在等待时 wait 会释放锁,而 sleep 一直持有锁。Wait 通常被用于线 程间交互,sleep 通常被用于暂停执行。 直接了解的深入一点吧: 在 Java 中线程的状态一共被分成 6 种: 初始态:NEW 创建一个 Thread 对象,但还未调用 start()启动线程时,线程处 阅读全文
posted @ 2020-06-07 16:32 咔啡 阅读(345) 评论(0) 推荐(0)
摘要: 在两个线程间共享变量即可实现共享。 一般来说,共享变量要求变量本身是线程安全的,然后在线程内使用的时候,如果有对共享变量的复合操作,那么也得保证复合操作的线程安全性。 阅读全文
posted @ 2020-06-07 16:31 咔啡 阅读(254) 评论(0) 推荐(0)
摘要: Java API 强制要求这样做,如果你不这么做,你的代码会抛出 IllegalMonitorStateException 异常。还有一个原因是为了避免 wait 和 notify 之间产生竞态条件。 阅读全文
posted @ 2020-06-07 16:30 咔啡 阅读(803) 评论(0) 推荐(0)
摘要: java.util.Timer 是一个工具类,可以用于安排一个线程在未来的某个特定时间执 行。Timer 类可以用安排一次性任务或者周期任务。 java.util.TimerTask 是一个实现了 Runnable 接口的抽象类,我们需要去继承这 个类来创建我们自己的定时任务并使用 Timer 去安 阅读全文
posted @ 2020-06-07 16:29 咔啡 阅读(474) 评论(0) 推荐(0)
摘要: 1、是多个线程涉及到多个锁,这些锁存在着交叉,所以可能会导致了一个锁依赖的闭环。 例如:线程在获得了锁 A 并且没有释放的情况下去申请锁 B,这时,另一个线程 已经获得了锁 B,在释放锁 B 之前又要先获得锁 A,因此闭环发生,陷入死锁循环。 2、默认的锁申请操作是阻塞的。 所以要避免死锁,就要在一 阅读全文
posted @ 2020-06-07 16:26 咔啡 阅读(177) 评论(0) 推荐(0)
摘要: 在 java.lang.Thread 中有一个方法叫 holdsLock(),它返回 true 如果当且仅当当 前线程拥有某个具体对象的锁。 阅读全文
posted @ 2020-06-07 16:23 咔啡 阅读(935) 评论(0) 推荐(0)
上一页 1 ··· 40 41 42 43 44 45 46 47 48 ··· 55 下一页