多线程
CPeony
大三,from bytedance to netease,下一站会在哪?
展开
-
四个线程交替打印字符串
来源于leetcode1195原题如下:编写一个可以从 1 到 n 输出代表这个数字的字符串的程序,但是:如果这个数字可以被 3 整除,输出 “fizz”。如果这个数字可以被 5 整除,输出 “buzz”。如果这个数字可以同时被 3 和 5 整除,输出 “fizzbuzz”。例如,当 n = 15,输出: 1, 2, fizz, 4, buzz, fizz, 7, 8, fizz, buzz, 11, fizz, 13, 14, fizzbuzz。假设有这么一个类:class FizzB.原创 2020-11-03 17:10:03 · 627 阅读 · 2 评论 -
两个线程交替打印语句
来源于leetcode1115题目我们提供一个类:class FooBar {public void foo() {for (int i = 0; i < n; i++) {print(“foo”);}}public void bar() {for (int i = 0; i < n; i++) {print(“bar”);}}}两个不同的线程将会共用一个 FooBar 实例。其中一个线程将会调用 foo() 方法,另一个线程将会调用 bar() 方法。.原创 2020-10-30 18:13:59 · 127 阅读 · 0 评论 -
多线程按顺序打印
多线程按顺序打印来源于leetcode1114我们提供了一个类:public class Foo {public void first() { print(“first”); }public void second() { print(“second”); }public void third() { print(“third”); }}三个不同的线程将会共用一个 Foo 实例。线程 A 将会调用 first() 方法线程 B 将会调用 second() 方法线程 C 将会调用原创 2020-10-29 21:00:42 · 547 阅读 · 0 评论 -
Thread的几种方法和线程状态
Thread的方法1.sleep睡眠几秒钟,让出CPU让别人执行。2.yield短暂的让一下CPU,谁能抢到就执行,抢不到还是原来的执行。3.join有ab两个线程。a线程在某一时刻调用了join(b线程),此时a线程sleep,直到b线程执行结束,a继续执行。注意自己join自己是不行的。4.getState得到线程的状态、一共六种:...原创 2020-10-29 19:11:44 · 275 阅读 · 0 评论 -
Future类的使用和原理
java异步接口Future和CallableFuture是Concurrent包提供的一种异步得到结果的接口。Future接口:public interface Future<V> { // 取消当前的计算 boolean cancel(boolean mayInterruptIfRunning); // 计算是否被取消 boolean isCancelled(); // 计算是否已经结束 boolean isDone(); //原创 2020-10-29 19:05:04 · 1336 阅读 · 0 评论 -
ConcurrentHashMap源码解析
jdk1.8ConcurrentHashMap解析本文部分内容来源于互联网和jdk1.8源码,如有不对请谅解并指正1、前言ConcurrentHashMap是一种同步的map,因为HashMap在多线程情况下不安全,而HashTable锁粒度又太大,所以出来了ConcurrentHashMap。正式开始之前,先说明一个参数,这是HashMap里面没有的。sizeCtl/** * Table initialization and resizing control. When negat原创 2020-10-29 19:02:29 · 340 阅读 · 0 评论 -
AQS源码解析
AQS源码解析原创 2020-10-29 19:00:53 · 379 阅读 · 1 评论 -
JUC包一些锁的介绍和使用
JUC包的这些锁都是基于AQS的实现,关于AQS还请看下一篇文章一、ReentrantLock可重入锁独占锁,synchronized就属于可重入锁。Lock可以替代synchronized锁代码块。public void test() { synchronized (this) { try { Thread.sleep(1000); } catch (InterruptedException e) .原创 2020-10-29 18:51:39 · 538 阅读 · 0 评论 -
CAS、synchronized和volatile
一.CASCASnative方法。修改一个值,当前为0,现在要加一,在写回的时候,判断该变量是否还是0,。ABA问题CAS会有一个问题,如果该变量还是0,不一定代表他没有被人修改过。比如另一个线程对他加2,然后又被减2,虽然最后还是0,但是他不是最开始的那个0.解决办法:可以加一个bool表示是否修改过加一个版本号CAS底层汇编实现用 AtomicInteger 一步一步查到最后。java native代码->虚拟机jvm的c++代码->linux的汇编代码lock原创 2020-10-29 18:44:15 · 166 阅读 · 0 评论