⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 right6_2.htm

📁 清华大学JAVA教程
💻 HTM
字号:
<html><head><title>JAVA编程语言</title><meta http-equiv="Content-Type" content="text/html; charset=gb2312"><link rel="stylesheet" href="../../../css/text.css" type="text/css"><script language="JavaScript" type="text/JavaScript"><!--function MM_openBrWindow(theURL,winName,features) { //v2.0  window.open(theURL,winName,features);}//--></script></head><body bgcolor="#FFFFFF" text="#000000" leftmargin="0" topmargin="0" marginwidth="0" marginheight="0" ><table width="100%" border="0" cellpadding="0" cellspacing="0" bgcolor="#FFFFFF">  <tr>     <td valign="top">       <table width="94%" border="0" cellspacing="0" cellpadding="0" align="center" bgcolor="#FFFFFF">        <tr>          <td valign="top">             <p> <span class="pt9-black"><img src="../../../images/html/liti.gif" width="38" height="38" align="absbottom" title="例题"> <font color="000099">例6.4</font>               <br>                class stack{<br>                 int idx=0; //堆栈指针的初始值为0<br>                 char[ ] data = new char[6]; <font color="339900">//堆栈有6个字符的空间</font></span></p>            <p class="pt9-black">    public void push(char c){<font color="339900">               //压栈操作</font><br>                  data[idx] = c; <font color="339900">//数据入栈</font><br>                  idx + +; <font color="339900">//指针向上移动一位</font><br>                 }</p>            <p><span class="pt9-black">      public char pop(){ <font color="339900">//出栈操作</font><br>                     idx - -; <font color="339900">//指针向下移动一位</font><br>                     return data[idx]; <font color="339900">//数据出栈</font><br>                   }<br>                 }<br>              <br>                <a href="#" onClick="MM_openBrWindow('62f.htm','','width=720,height=360')">--观看动画--</a><br>              <br>                两个线程A和B在同时使用Stack的同一个实例对象,A正在往堆栈里push一个数据,B则要从堆栈中pop一个数据。如果由于线程A和B在对Stack对象的操作上的不完整性,会导致操作的失败,具体过程如下所示:<br>              <br>                1) 操作之前 <br>                   data = | p | q | | | | | idx=2</span></p>            <p><span class="pt9-black"><br>                2) A执行push中的第一个语句,将r推入堆栈;<br>                   data = | p | q | r | | | | idx=2<br>              <br>                3) A还未执行idx++语句,A的执行被B中断,B执行pop方法,返回q:<br>                   data = | p | q | r | | | | idx=1<br>              <br>                4〕A继续执行push的第二个语句:<br>                   data = | p | q | r | | , | | idx=2<br>                <br>                最后的结果相当于r没有入栈。产生这种问题的原因在于对共享数据访问的操作的不完整性。<br>              </span> </p>          </td>        </tr>      </table>    </td>  </tr></table></body></html>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -