第一个问题:两个线程交替打印 "1234567" 与 "ABCDEFG" 打印结果:"1A2B3C4D5E6F7G"
代码如下:
- public class AlternatePrinting {
-
- static Thread t1 = null;
- static Thread t2 = null;
-
- public static void main(String[] args) {
- char[] charArray1 = "1234567".toCharArray();
- char[] charArray2 = "ABCDEFG".toCharArray();
-
- t1 = new Thread(()->{
- for (char numerChar : charArray1){
- System.out.print(numerChar);
- LockSupport.unpark(t2);
- LockSupport.park();
- }
- });
-
- t2 = new Thread(()->{
- for (char numerChar : charArray2){
- LockSupport.park();
- LockSupport.unpark(t1);
- System.out.print(numerChar);
- }
- });
-
- t1.start();
- t2.start();
- }
- }
第二个问题:三个线程交替打印 ,A线程打印"A" ,B线程打印"B",C线程打印"C", 打印10遍
- public class AlternatePrintingA {
-
- public static void main(String[] args) {
-
- final Lock lock = new ReentrantLock();
- Condition condition1 = lock.newCondition();
- Condition condition2 = lock.newCondition();
- Condition condition3 = lock.newCondition();
-
- Thread t1 = new Thread(() ->{
- lock.lock();
- try {
- for (int i = 0;i<10;i++){
- System.out.print("A");
- condition2.signal();
- condition3.signal();
- condition1.await();
- }
- condition2.signal();
- condition3.signal();
- }catch (Exception e){
- }finally {
- lock.unlock();
- }
-
- });
-
- Thread t2 = new Thread(() ->{
- lock.lock();
- try {
- for (int i = 0;i<10;i++){
- System.out.print("B");
- condition1.signal();
- condition3.signal();
- condition2.await();
- }
- condition1.signal();
- condition3.signal();
- }catch (Exception e){
- }finally {
- lock.unlock();
- }
-
- });
-
- Thread t3 = new Thread(() ->{
- lock.lock();
- try {
- for (int i = 0;i<10;i++){
- System.out.print("C");
- condition1.signal();
- condition2.signal();
- condition3.await();
- }
- condition1.signal();
- condition2.signal();
- }catch (Exception e){
- }finally {
- lock.unlock();
- }
- });
-
- t1.start();
- t2.start();
- t3.start();
- }
- }