您好,欢迎访问一九零五行业门户网

java实现两个线程交替打印

使用reentrantlock实现两个线程交替打印
实现字母在前数字在后
package com.study.pattern;import java.util.concurrent.countdownlatch;import java.util.concurrent.locks.condition;import java.util.concurrent.locks.lock;import java.util.concurrent.locks.reentrantlock;public class demo2 { private static lock lock = new reentrantlock(); private static condition c1 = lock.newcondition(); private static condition c2 = lock.newcondition(); private static countdownlatch count = new countdownlatch(1); public static void main(string[] args) { string c = "abcdefghi"; char[] ca = c.tochararray(); string n = "123456789"; char[] na = n.tochararray(); thread t1 = new thread(() -> { try { lock.lock(); count.countdown(); for(char caa : ca) { c1.signal(); system.out.print(caa); c2.await(); } c1.signal(); } catch (interruptedexception e) { e.printstacktrace(); } finally { lock.unlock(); } }); thread t2 = new thread(() -> { try { count.await(); lock.lock(); for(char naa : na) { c2.signal(); system.out.print(naa); c1.await(); } c2.signal(); } catch (interruptedexception e) { e.printstacktrace(); } finally { lock.unlock(); } }); t1.start(); t2.start(); }}
最后输出结果:
免费学习视频教程推荐:java教学视频
使用linkedtransferqueue实现两个线程交替打印
实现字母在前数字在后
package com.study.pattern;import java.util.concurrent.linkedtransferqueue;public class demo3 { private static linkedtransferqueue<character> linkedc = new linkedtransferqueue<character>(); private static linkedtransferqueue<character> linkedn = new linkedtransferqueue<character>(); public static void main(string[] args) { string c = "abcdefghi"; char[] ca = c.tochararray(); string n = "123456789"; char[] na = n.tochararray(); thread t1 = new thread(() -> { for(char caa : ca) { try { linkedc.put(caa); char a = linkedn.take(); system.out.print(a); } catch (interruptedexception e) { e.printstacktrace(); } } }); thread t2 = new thread(() -> { for(char naa : na) { try { char b = linkedc.take(); system.out.print(b); linkedn.put(naa); } catch (interruptedexception e) { e.printstacktrace(); } } }); t1.start(); t2.start(); }}
输出结果:
使用synchronized实现两个线程交替打印
实现字母在前数字在后
package com.study.pattern;import java.util.concurrent.countdownlatch;public class demo4 { private static countdownlatch count = new countdownlatch(1); public static void main(string[] args) { string c = "abcdefghi"; char[] ca = c.tochararray(); string n = "123456789"; char[] na = n.tochararray(); object lock = new object(); thread t1 = new thread(() -> { synchronized (lock) { count.countdown(); for(char caa : ca) { system.out.print(caa); lock.notify(); try { lock.wait(); } catch (interruptedexception e) { e.printstacktrace(); } } lock.notify(); } }); thread t2 = new thread(() -> { try { count.await(); } catch (interruptedexception e) { e.printstacktrace(); } synchronized (lock) { for(char naa : na) { system.out.print(naa); lock.notify(); try { lock.wait(); } catch (interruptedexception e) { e.printstacktrace(); } } lock.notify(); } }); t1.start(); t2.start(); }}
输出结果:
使用locksupport实现两个线程交替打印
实现字母在前数字在后
package com.study.pattern;import java.util.concurrent.locks.locksupport;public class demo5 { private static thread t1; private static thread t2; public static void main(string[] args) { string c = "abcdefghi"; char[] ca = c.tochararray(); string n = "123456789"; char[] na = n.tochararray(); t1 = new thread(() -> { for(char caa : ca) { system.out.print(caa); locksupport.unpark(t2); locksupport.park(); } }); t2 = new thread(() -> { for(char naa : na) { locksupport.park(); system.out.print(naa); locksupport.unpark(t1); } }); t1.start(); t2.start(); }}
输出结果:
相关文章教程推荐:java零基础入门
以上就是java实现两个线程交替打印的详细内容。
其它类似信息

推荐信息