1. 程式人生 > >SWUST--Java實驗(六) 執行緒

SWUST--Java實驗(六) 執行緒

public class CaThread implements Runnable {

	static double sum = 1;
	static String str = "1!";
	static int n = 1;
	Thread thread;//執行緒類物件

	public CaThread() {
		thread = new Thread(this);//呼叫本類物件
		thread.start();
	}

	double plus(int n) {
		sum = 1;
		for (int i = 1; i <= n; i++)
			sum *= i;
		return sum;
	}
public class ReadThread extends Thread {
	CaThread caThread;

	public ReadThread(CaThread caThread) {
		this.caThread = caThread;//呼叫CaThread構造器
	}

	public void run() {

		try {
			while (true) {
				sleep(1000);
				ThreadGUI.textArea.setText(caThread.str);
				ThreadGUI.textField.setText(caThread.sum + "");
				ThreadGUI.progressBar.setValue(caThread.n);
			}
		} catch (InterruptedException e) {
			System.err.println("程式讀取失敗!");
		}
	}
}
public class ThreadGUI extends JFrame implements ActionListener {

	JPanel contentPane;
	static JTextField textField = new JTextField();;
	static JProgressBar progressBar = new JProgressBar();
	static JTextArea textArea = new JTextArea();
	JButton bt1 = new JButton("\u5F00\u59CB");
	JButton bt2 = new JButton("\u505C\u6B62");
	CaThread c = new CaThread();
	ReadThread r = new ReadThread(c);

	/**
	 * Launch the application.
	 */
	public static void main(String[] args) {
		EventQueue.invokeLater(new Runnable() {
			public void run() {
				try {
					ThreadGUI frame = new ThreadGUI();
					frame.setVisible(true);
				} catch (Exception e) {
					e.printStackTrace();
				}
			}
		});
	}

	/**
	 * Create the frame.
	 */
	public ThreadGUI() {
		setTitle("\u591A\u7EBF\u7A0B\u5C0F\u7A0B\u5E8F");
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setBounds(100, 100, 418, 185);
		contentPane = new JPanel();
		contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
		setContentPane(contentPane);
		contentPane.setLayout(null);

		bt1.setFont(new Font("宋體", Font.PLAIN, 14));
		bt1.setBounds(309, 64, 63, 34);
		contentPane.add(bt1);

		bt2.setFont(new Font("宋體", Font.PLAIN, 14));
		bt2.setBounds(309, 108, 63, 34);
		contentPane.add(bt2);

		JLabel lblNewLabel = new JLabel("\u8BA1\u7B97\u8FC7\u7A0B\uFF1A");
		lblNewLabel.setFont(new Font("宋體", Font.PLAIN, 14));
		lblNewLabel.setBounds(21, 17, 85, 24);
		contentPane.add(lblNewLabel);

		JLabel label = new JLabel("\u8FD0\u884C\u7ED3\u679C\uFF1A");
		label.setFont(new Font("宋體", Font.PLAIN, 14));
		label.setBounds(21, 108, 85, 24);
		contentPane.add(label);

		JLabel label_1 = new JLabel("\u8FDB\u5EA6\u6761  \uFF1A");
		label_1.setFont(new Font("宋體", Font.PLAIN, 14));
		label_1.setBounds(21, 69, 85, 24);
		contentPane.add(label_1);

		JScrollPane scrollPane = new JScrollPane();
		scrollPane.setBounds(116, 44, 282, -15);
		contentPane.add(scrollPane);

		JPanel panel = new JPanel();
		panel.setBounds(99, 14, 294, 34);
		contentPane.add(panel);
		panel.setLayout(new BorderLayout(0, 0));

		JScrollPane scrollPane_1 = new JScrollPane();
		panel.add(scrollPane_1, BorderLayout.CENTER);
		textArea.setFont(new Font("Monospaced", Font.PLAIN, 14));

		scrollPane_1.setViewportView(textArea);
		progressBar.setMaximum(30);

		progressBar.setForeground(Color.ORANGE);
		progressBar.setBounds(99, 69, 181, 24);
		contentPane.add(progressBar);

		textField.setBounds(99, 107, 181, 27);
		contentPane.add(textField);
		textField.setColumns(10);
		bt1.addActionListener(this);
		bt2.addActionListener(this);
	}

	@Override
	public void actionPerformed(ActionEvent e) {
		if (e.getSource() == bt1) {	
			bt1.setEnabled(false);
			bt2.setEnabled(true);
			r.start();
		}
		if (e.getSource() == bt2) {
			bt1.setEnabled(true);
			bt2.setEnabled(false);
			r.stop();
		}
	}
}


相關推薦

SWUST--Java實驗() 執行

public class CaThread implements Runnable { static double sum = 1; static String str = "1!"; static int n = 1; Thread thread;//執行緒類物件

JAVA實驗執行的使用

實驗內容: 1.哈爾濱火車站下面有三個火車票代售點,假如哈爾濱到北京的火車票總共是200張,如何用程式來實現三個售票點同時賣票的功能。 2.設計5個人排隊買票,並規定買票規則和排隊順序。 程式碼實現: package cn.edu.nefu.zhihu.xiancheng

UNIX程式設計實驗 執行及其同步—哲學家問題

                                                   實驗六 執行緒及其同步—哲學家問題 學習執行緒的程式設計和同步。 二 實驗要求: 1、程式語法 philosopher_th   <N> [ -t  <

Java執行核心技術()執行組與執行異常

本文應注重掌握如下知識點: 執行緒組的使用 如何切換執行緒狀態 SimpleDataFormat 類與多執行緒的解決辦法 如何處理執行緒的異常 1.執行緒的狀態 執行緒物件在不同執行時期有不同的狀態,狀態資訊就處於State列舉類中,如圖所示: 執行緒狀態 初始(NEW):新建立了一個執行緒物件,但還

實驗 執行技術

                                            &

(十java併發程式設計--執行的死鎖解決方案(生產者和消費者幾種實現方式)

上一篇中,主要了解了什麼時候死鎖,並且提出死鎖的一個解決方案,多個鎖要按照一定的順序來。 本片主要是利用生產者消費者模式解決執行緒的死鎖。 多執行緒生產者和消費者一個典型的多執行緒程式。一個生產者生產提供消費的東西,但是生產速度和消費速度是不同的。這就需要讓

[Java併發程式設計]-執行種狀態及其狀態轉換

轉載請註明:http://blog.csdn.net/UniKylin/article/details/45050823 1.執行緒自身資訊 執行緒執行的過程會產生很多資訊,這些資訊都儲存在Thread類中的成員變數裡面,常見的有: a.執行緒的ID是唯

Java併發學習之十——執行同步工具之訊號量(Semaphores)

當一個執行緒想要訪問某個共享資源,首先,它必須獲得semaphore。如果semaphore的內部計數器的值大於0,那麼semaphore減少計數器的值並允許訪問共享的資源。計數器的值大於0表示,有可以自由使用的資源,所以執行緒可以訪問並使用它們。

Java併發程式設計——執行池的使用(執行池的常用方法

整理了一下執行緒池經常用到的方法: //是否正在shutdown() executor.isTerminating(); //是否已經shutdown() executor.isTerminated(); //在3秒內是否shutdown(),如果不呼叫s

Java 建立多執行

1、繼承java.lang.Thread方式 執行start方法:MyThread的run就會被執行 程式碼片段: import java.util.Scanner; public class Main { public static void main(String[] a

Java四種執行池newCachedThreadPool,newFixedThreadPool,newScheduledThreadPool,newSingle

轉自:https://www.cnblogs.com/baizhanshi/p/5469948.html 1、new Thread的弊端 執行一個非同步任務你還只是如下new Thread嗎? Java   1 2 3 4 5 6 7

Java如何停止執行

Preface 啟動一個執行緒或任務都是很簡單,執行緒一般在任務結束後便會自行停止。但是有時我們希望能夠線上程自行停止前能夠停止它們,比如一些取消操作,或者是應用程式需要快速關閉。博主日前就遇到了這樣的問題。 但是在《JAVA併發程式設計實踐》一書中指出: Java沒有提供任何機

java 併發(執行&鎖)

java 併發(執行緒&鎖) ##執行緒 ###執行緒概念 作業系統排程的最小單元是執行緒,也叫輕量級程序(LightWeight Process),在一個程序裡可以建立多個執行緒,這些執行緒都擁有各自的計數器、堆疊和區域性變數等屬性,並且能夠訪問共享的記憶體變數。處

java併發學習--執行池(一)

關於java中的執行緒池,我一開始覺得就是為了避免頻繁的建立和銷燬執行緒吧,先建立一定量的執行緒,然後再進行復用。但是要具體說一下如何做到的,自己又說不出一個一二三來了,這大概就是自己的學習習慣流於表面,不經常深入的結果吧。所以這裡決定系統的學習一下執行緒池的相關知識。   自己稍微總結了一下,

Java中停止執行

一.停止執行緒會帶來什麼? 對於單執行緒中,停止單執行緒就是直接使用關鍵字return或者break,但是在停止多執行緒時是讓執行緒在完成任務前去開啟另外一條執行緒,必須放棄當前任務,而這個過程是不可預測,所以必須去做好防備。 二.認識停止執行緒的幾個方法  2.1三個被棄用的

java執行系列翻譯之java併發/多執行教程

原文地址:http://tutorials.jenkov.com/java-concurrency/index.html 以前計算機都是單核,同時只能執行一個程式。之後出現了多重任務處理,這意味著計算機同時可以處理多個程式(又名任務或流程)。但這不是真正的“同時執行”,只是單個CPU被多個程式共

java隨筆——多執行

//多執行緒 //第一種方法 package we; public class me { public static void main(String[] args) { My p=new My(); p.start();//啟用多執行緒 while(true)

Java 四種執行池 - 使用

轉:https://www.cnblogs.com/zhujiabin/p/5404771.html 介紹new Thread的弊端及Java四種執行緒池的使用,對Android同樣適用。本文是基礎篇,後面會分享下執行緒池一些高階功能。 1、new Thread的弊端 執行一個非同步任務你還

【學習筆記】Java-Concurrent-多執行容器

BlockingQueue 阻塞佇列 高頻函式:   boolean put() 新增一個元素 沒有空間則一直阻塞等待   boolean add() 新增一個元素 沒有空間則丟擲IllegalStateException異常   boolean off

【學習筆記】Java-Concurrent-多執行測試模板

import java.util.concurrent.CountDownLatch; /** * 多執行緒測試模板 * * @author Mairuis * @date 2018/10/11 */ public class ConcurrentTest { public s