📄 frame1.java
字号:
package signal;import java.awt.*;import java.awt.event.*;import javax.swing.*;import java.io.*;import java.lang.*;/** * <p>Title: </p> * <p>Description: </p> * <p>Copyright: Copyright (c) 2002</p> * <p>Company: </p> * @author unascribed * @version 1.0 */public class Frame1 extends JFrame { JPanel contentPane; TextArea textArea1 = new TextArea(); Button button1 = new Button(); //Construct the frame public Frame1() { enableEvents(AWTEvent.WINDOW_EVENT_MASK); try { jbInit(); } catch(Exception e) { e.printStackTrace(); } } //Component initialization private void jbInit() throws Exception { //setIconImage(Toolkit.getDefaultToolkit().createImage(Frame1.class.getResource("[Your Icon]"))); contentPane = (JPanel) this.getContentPane(); textArea1.setBounds(new Rectangle(84, 27, 234, 146)); contentPane.setLayout(null); this.setSize(new Dimension(400, 300)); this.setTitle("信号量的使用"); button1.setLabel("运行"); button1.setBounds(new Rectangle(130, 199, 147, 41)); button1.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(ActionEvent e) { button1_actionPerformed(e); } }); contentPane.add(textArea1, null); contentPane.add(button1, null); } //Overridden so we can exit when window is closed protected void processWindowEvent(WindowEvent e) { super.processWindowEvent(e); if (e.getID() == WindowEvent.WINDOW_CLOSING) { System.exit(0); } } void button1_actionPerformed(ActionEvent e) { Sender send=new Sender(); Thread thread1=new Thread(send); Receiver receive=new Receiver(send); Thread thread2=new Thread(receive); thread2.setDaemon(true); thread1.start(); thread2.start(); try { thread1.join(); while(send.signal) { Thread.sleep(100); } } catch(Exception ee) { ee.printStackTrace(); } } class Sender implements Runnable { volatile int sendValue; volatile boolean signal;//信号标识 public void run() { for(int i=0;i<5;i++) { while(signal) { Thread.yield(); } sendValue=(int)(Math.random()*256); textArea1.append("\n发送的数据为: "+sendValue); signal=true; } } } class Receiver implements Runnable { Sender theSender; public Receiver(Sender sender) { theSender=sender; } public void run() { while(true) { while(!theSender.signal) { Thread.yield(); } textArea1.append("\n接收到的数据为: "+theSender.sendValue); theSender.signal=false; } } }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -