您好,登錄后才能下訂單哦!
怎么在Java中利用多線(xiàn)程實(shí)現(xiàn)交叉打???很多新手對(duì)此不是很清楚,為了幫助大家解決這個(gè)難題,下面小編將為大家詳細(xì)講解,有這方面需求的人可以來(lái)學(xué)習(xí)下,希望你能有所收獲。
方式一:使用wait()和notifyAll()方法
public class MyService { private volatile boolean flag = false; public synchronized void printA() { try { while (flag) { wait(); } for (int i = 0; i < 5; i++) { System.out.println("printA..."); TimeUnit.SECONDS.sleep(1); } flag = true; notifyAll(); } catch (InterruptedException e) { e.printStackTrace(); } } public synchronized void printB() { try { while (!flag) { wait(); } for (int i = 0; i < 5; i++) { System.out.println("printB..."); TimeUnit.SECONDS.sleep(1); } flag = false; notifyAll(); } catch (InterruptedException e) { e.printStackTrace(); } } }
public class BackupA implements Runnable { private MyService myService; public BackupA(MyService myService) { super(); this.myService = myService; } @Override public void run() { myService.printA(); } }
public class BackupB implements Runnable { private MyService myService; public BackupB(MyService myService) { super(); this.myService = myService; } @Override public void run() { myService.printB(); } }
public class Run { public static void main(String[] args) { MyService myService = new MyService(); for (int i = 0; i < 20; i++) { new Thread(new BackupA(myService)).start(); new Thread(new BackupB(myService)).start(); } } }
方式二:使用await()和signalAll()方法
public class MyService { private Lock lock = new ReentrantLock(); private Condition condition = lock.newCondition(); private boolean flag = false; public void printA() { try { lock.lock(); while (flag) { condition.await(); } for (int i = 0; i < 5; i++) { System.out.println("printA..."); TimeUnit.SECONDS.sleep(1); } flag = true; condition.signalAll(); } catch (InterruptedException e) { e.printStackTrace(); } finally { lock.unlock(); } } public void printB() { try { lock.lock(); while (!flag) { condition.await(); } for (int i = 0; i < 5; i++) { System.out.println("printB..."); TimeUnit.SECONDS.sleep(1); } flag = false; condition.signalAll(); } catch (InterruptedException e) { e.printStackTrace(); } finally { lock.unlock(); } } }
public class ThreadA implements Runnable { private MyService myService; public ThreadA(MyService myService) { super(); this.myService = myService; } @Override public void run() { myService.printA(); } }
public class ThreadB implements Runnable { private MyService myService; public ThreadB(MyService myService) { super(); this.myService = myService; } @Override public void run() { myService.printB(); } }
public class Run { public static void main(String[] args) { MyService myService = new MyService(); for (int i = 0; i < 20; i++) { new Thread(new ThreadA(myService)).start(); new Thread(new ThreadB(myService)).start(); } } }
1.SpringMVC,Spring Web MVC是一種基于Java的實(shí)現(xiàn)了Web MVC設(shè)計(jì)模式的請(qǐng)求驅(qū)動(dòng)類(lèi)型的輕量級(jí)Web框架。2.Shiro,Apache Shiro是Java的一個(gè)安全框架。3.Mybatis,MyBatis 是支持普通 SQL查詢(xún),存儲(chǔ)過(guò)程和高級(jí)映射的優(yōu)秀持久層框架。4.Dubbo,Dubbo是一個(gè)分布式服務(wù)框架。5.Maven,Maven是個(gè)項(xiàng)目管理和構(gòu)建自動(dòng)化工具。6.RabbitMQ,RabbitMQ是用Erlang實(shí)現(xiàn)的一個(gè)高并發(fā)高可靠AMQP消息隊(duì)列服務(wù)器。7.Ehcache,EhCache 是一個(gè)純Java的進(jìn)程內(nèi)緩存框架。
看完上述內(nèi)容是否對(duì)您有幫助呢?如果還想對(duì)相關(guān)知識(shí)有進(jìn)一步的了解或閱讀更多相關(guān)文章,請(qǐng)關(guān)注億速云行業(yè)資訊頻道,感謝您對(duì)億速云的支持。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。