介绍
这篇文章给大家分享的是有关Java怎么实现多线程切换等待唤醒交替打印奇偶数的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。
<强>引言强>
,,,,在日常工作生活中,可能会有用时几个人或是很多人干同一件事,在java编程中,同样也会出现类似的情况,多个线程干同样一个活儿,比如火车站买票系统不能多个人买一到的是同一张票,当某个窗口(线程)在卖某一张票的时候,别的窗口(线程)不允许再卖此张票了,在此过程中涉及到一个锁和资源等待的问题,如何合理正确的让线程与线程在干同一件事的过程中,不会抢资源以及一个一直等待一个一直干活的状况,接下来就聊一下多线程的等待唤醒以及切换的过程,在此就以A和B两个线程交替打印奇偶数的例子为例,代码如下:
package com.svse.thread; import java.util.concurrent.atomic.AtomicInteger;/* * ,*交替打印奇偶数 *功能说明: * @author: zsq ,* create 日期:2019年5月27日,下午4:34:30 ,*修改人,修改时间,修改描述 * 2019年,* Copyright (c)北京智华天成科技有限公司——版权所有 */public class  AlternatePrinting {//让两个线程使用同一把锁。交替执行,。 ,//判断是不是奇数,如果是奇数进入奇数线程执行打印并加一。然后线程释放锁资源,然后让该线程等待 ,//判断是不是偶数,如果是偶数进入偶数线程执行打印并加一。然后线程释放锁资源,然后让该线程等待 ,public static  AtomicInteger AtomicInteger =new AtomicInteger (1); public static  void main (String [], args), { Thread =new 线程(new AThread ()); Thread b=new 线程(new BThread ()); a.start (); b.start (); }//奇数线程 ,public static  class AThread implements  Runnable { public void  run (), { 而(真){ synchronized (atomicInteger), { 如果(atomicInteger.intValue () % 2, !=0) { System.out.println(“奇数线程:“,+,atomicInteger.intValue ()); try { thread . sleep (500); },catch (InterruptedException e1), {//,TODO Auto-generated  catch 块 e1.printStackTrace (); } atomicInteger.getAndIncrement();,//,以原子方式将当前值加,1。 ,//,奇数线程释放锁资源 ,atomicInteger.notify();//执行完操作后释放锁并进入等待 ,try { atomicInteger.wait (); },catch (InterruptedException e), { e.printStackTrace (); } 其他}{//,奇数线程等待 ,try { atomicInteger.wait (); },catch (InterruptedException e), {//,TODO Auto-generated  catch 块 e.printStackTrace (); } } } ,} } } ,//偶数线程 ,public static  class BThread implements  Runnable { public void  run (), { 而(真){ synchronized (atomicInteger), { 如果(atomicInteger.intValue () % 2,==0) { System.out.println(“偶数线程:“+,atomicInteger.intValue ()); try { thread . sleep (500); },catch (InterruptedException e1), {//,TODO Auto-generated  catch 块 e1.printStackTrace (); } atomicInteger.getAndIncrement();,//,以原子方式将当前值加,1。 ,//,偶数线程释放锁资源 ,atomicInteger.notify();//执行完操作后释放锁并进入等待 ,try { atomicInteger.wait (); },catch (InterruptedException e), { e.printStackTrace (); } 其他}{ {try //,偶数线程等待 ,atomicInteger.wait (); },catch (InterruptedException e), {//,TODO Auto-generated  catch 块 e.printStackTrace (); } ,} ,} } ,,} ,} }
,效果如下:
Java的特点有哪些
Java的特点有哪些 1. java语言作为静态面向对象编程语言的代表,实现了面向对象理论,允许程序员以优雅的思维方式进行复杂的编程。 2. java具有简单性,面向对象,分布式、安全性,平台独立与可移植性,动态性等特点。 3.使用Java可以编写桌面应用程序,网络应用程序,分布式系统和嵌入式系统应用程序等。