diff --git a/src/main/java/hxy/bytecode/lock/ReentrantLockTest.java b/src/main/java/hxy/bytecode/lock/ReentrantLockTest.java index b2de45f96fa51ef51c652140e0359a1935d38264..5a37573e821afda6c22c289cc19e8795de37a9dd 100644 --- a/src/main/java/hxy/bytecode/lock/ReentrantLockTest.java +++ b/src/main/java/hxy/bytecode/lock/ReentrantLockTest.java @@ -1,5 +1,6 @@ package hxy.bytecode.lock; +import java.util.ArrayList; import java.util.concurrent.locks.ReentrantLock; /** @@ -19,12 +20,20 @@ public class ReentrantLockTest extends Thread { @Override public void run() { + ArrayList a = new ArrayList(); // 10000000 for (int j = 0; j < 100000; j++) { + a.add(j); lock.lock(); try { - System.out.println(this.getName() + " " + i); - i++; +// 这就是可重入,对于同一把锁是可以获取两次的。 https://www.jianshu.com/p/155260c8af6c 有啥意义 + lock.lock(); + try { + System.out.println(this.getName() + " " + i); + i++; + } finally { + lock.unlock(); + } } finally { lock.unlock(); } diff --git a/src/main/java/hxy/bytecode/thread/multi/AddRunnable.java b/src/main/java/hxy/bytecode/thread/multi/AddRunnable.java new file mode 100644 index 0000000000000000000000000000000000000000..0bca2f510e99aa22ffd475e26325899f6453006f --- /dev/null +++ b/src/main/java/hxy/bytecode/thread/multi/AddRunnable.java @@ -0,0 +1,27 @@ +package hxy.bytecode.thread.multi; + +import java.util.ArrayList; + +/** + * @author eric + * @program bytecode + * @description \ + * @date 2021/5/15 + */ +public class AddRunnable implements Runnable { + @Override + public void run() { + ArrayList objects = new ArrayList<>(); + for (int i = 0; i < 100000000; i++) { + objects.add(i); + } + System.out.println(objects.size()); + } + + public static void main(String[] args) { + + new Thread(new AddRunnable(), "线程1").start(); + new Thread(new AddRunnable(), "线程2").start(); + + } +} diff --git a/src/main/java/hxy/bytecode/thread/multi/AddRunnable2.java b/src/main/java/hxy/bytecode/thread/multi/AddRunnable2.java new file mode 100644 index 0000000000000000000000000000000000000000..d1074fae84613351370d578232935f856d8ca46e --- /dev/null +++ b/src/main/java/hxy/bytecode/thread/multi/AddRunnable2.java @@ -0,0 +1,28 @@ +package hxy.bytecode.thread.multi; + +import java.util.ArrayList; + +/** + * @author eric + * @program bytecode + * @description \ + * @date 2021/5/15 + */ +public class AddRunnable2 implements Runnable { + + ArrayList objects = new ArrayList<>(); + + @Override + public void run() { + for (int i = 0; i < 1000; i++) { + objects.add(i); + } + } + + public static void main(String[] args) { + + new Thread(new AddRunnable2(), "线程1").start(); + new Thread(new AddRunnable2(), "线程2").start(); + + } +} diff --git a/src/main/java/hxy/bytecode/thread/multi/AddRunnable3.java b/src/main/java/hxy/bytecode/thread/multi/AddRunnable3.java new file mode 100644 index 0000000000000000000000000000000000000000..4d028f16727dc69723de7607b8a803f3e8c8e5e9 --- /dev/null +++ b/src/main/java/hxy/bytecode/thread/multi/AddRunnable3.java @@ -0,0 +1,50 @@ +package hxy.bytecode.thread.multi; + +import java.util.ArrayList; +import java.util.List; +import java.util.concurrent.CountDownLatch; + +/** + * @author eric + * @program bytecode + * @description \ + * @date 2021/5/15 + */ +public class AddRunnable3 implements Runnable { + List list; + CountDownLatch countDownLatch; + + AddRunnable3(List list) { + this.list = list; + } + + AddRunnable3(List list, CountDownLatch countDownLatch) { + this.list = list; + this.countDownLatch = countDownLatch; + } + + @Override + public void run() { + for (int i = 0; i < 100000; i++) { + list.add(i); + } + System.out.println(list.size()); + countDownLatch.countDown(); + } + + public static void main(String[] args) { + ArrayList objects = new ArrayList<>(); + final CountDownLatch countDownLatch = new CountDownLatch(2); + + new Thread(new AddRunnable3(objects,countDownLatch), "线程1").start(); + new Thread(new AddRunnable3(objects,countDownLatch), "线程2").start(); + + try { + countDownLatch.await(); + } catch (InterruptedException e) { + e.printStackTrace(); + } + System.out.println(objects.size()); + + } +} diff --git a/src/main/java/hxy/bytecode/thread/multi/AddThread.java b/src/main/java/hxy/bytecode/thread/multi/AddThread.java new file mode 100644 index 0000000000000000000000000000000000000000..8a03c00af838f25c3fecc2eb33e5576c8cfcf4f6 --- /dev/null +++ b/src/main/java/hxy/bytecode/thread/multi/AddThread.java @@ -0,0 +1,15 @@ +package hxy.bytecode.thread.multi; + +/** + * @author eric + * @program bytecode + * @description + * @date 2021/5/15 + */ +public class AddThread extends Thread { + @Override + public void run() { + + + } +} diff --git a/src/test/java/hxy/bytecode/ArrayMove.java b/src/test/java/hxy/bytecode/ArrayMove.java new file mode 100644 index 0000000000000000000000000000000000000000..9218cff36f141aa56f7837bbc8ea1883b8e9bd92 --- /dev/null +++ b/src/test/java/hxy/bytecode/ArrayMove.java @@ -0,0 +1,40 @@ +package hxy.bytecode; + +import java.util.Arrays; + +/** + * @author eric + * @program bytecode + * @description 给定一个整数数组,把0挪到最后,其他数字的顺序不变。要求时间复杂度为1. 两两交换 + * @date 2021/6/27 + */ +public class ArrayMove { + public static void main(String[] args) { + int[] array = new int[]{1, 2, 0, 4, 5, 0, 6, 7, 9}; + int index2; + for (int i = 0; i < array.length; i++) { + if (array[i] == 0) { + // 查找下一个不为0的数组下标交换下。 + index2 = i; + if (index2 < array.length - 1) { + while (array[index2] == 0) { + index2++; + if (index2 >= array.length) { + break; + } + } + if (index2 <= array.length - 1) { + int temp = array[index2]; + array[index2] = array[i]; + array[i] = temp; + } + } + index2++; + } + } + final int[] ints = Arrays.stream(array).toArray(); + for (int i = 0; i < ints.length; i++) { + System.out.print(ints[i]); + } + } +}