java多线程实验 滚动字

package com.rgy.Test;

import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.WindowConstants;

public class Test3 extends JFrame{
		//添加属性
		//
		private JPanel panel[];
		private JTextField tf[];
		private JLabel label_sleep[];
		private JTextField tf_sleep[];
		private JButton button_start[];
		private JButton button_interrupt[];
		private JLabel label_state[];
		private JTextField tf_state[];
		private MyThread_0 thread_0;
		private MyThread_1 thread_1;
		private MyThread_2 thread_2;
		//
		private String texts[]={"Welcome","Hello","Rolly"};
		//
		private int sleeptime0;
		private int sleeptime1;
		private int sleeptime2;
		public Test3(String str){
			super(str);
			this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
			this.setBounds(500, 250, 500, 320);
			//添加功能代码
			this.setLayout(new GridLayout(6,1));
			tf=new JTextField[3];
			panel=new JPanel[3];
			label_sleep=new JLabel[3];
			tf_sleep=new JTextField[3];
			button_start=new JButton[3];
			button_interrupt=new JButton[3];
			label_state=new JLabel[3];
			tf_state=new JTextField[3];
			//
			for(int i=0;i<3;i++){
				panel[i]=new JPanel();
				tf[i]=new JTextField(String.format("%160s", texts[i]));
				tf[i].setHorizontalAlignment(JTextField.RIGHT);
				//
				label_sleep[i]=new JLabel("sleep");
				tf_sleep[i]=new JTextField(10);
				button_start[i]=new JButton("启动");
				button_interrupt[i]=new JButton("中断");
				label_state[i]=new JLabel("state");
				tf_state[i]=new JTextField(14);
				tf_state[i].setEditable(false);
				//
				panel[i].add(label_sleep[i]);
				panel[i].add(tf_sleep[i]);
				panel[i].add(button_start[i]);
				panel[i].add(button_interrupt[i]);
				panel[i].add(label_state[i]);
				panel[i].add(tf_state[i]);
				button_start[i].addActionListener(new button_handler());
				button_interrupt[i].addActionListener(new button_handler());
				this.add(tf[i]);
				this.add(panel[i]);
			}
			//
			this.pack();
			this.setVisible(true);
		}

		class MyThread_0 extends Thread{
			public void run(){
				while(true){
					try {
						String str=tf[0].getText();
						tf[0].setText(str.substring(1)+str.substring(0,1));
						sleep(sleeptime0);
					} catch (Exception e) {
						break;
					}
				}
			}
		}

		class MyThread_1 extends Thread{
			public void run(){
				while(true){
					try {
						String str=tf[1].getText();
						tf[1].setText(str.substring(1)+str.substring(0,1));
						sleep(sleeptime1);
					} catch (Exception e) {
						break;
					}
				}
			}
		}

		class MyThread_2 extends Thread{
			public void run(){
				while(true){
					try {
						String str=tf[2].getText();
						tf[2].setText(str.substring(1)+str.substring(0,1));
						sleep(sleeptime2);
					} catch (Exception e) {
						break;
					}
				}
			}
		}

		class button_handler implements ActionListener{
			public void actionPerformed(ActionEvent e) {
				if(e.getSource()==button_start[0]){
					sleeptime0=Integer.parseInt(tf_sleep[0].getText());
					thread_0=new MyThread_0();
					thread_0.start();
					button_start[0].setEnabled(false);
					button_interrupt[0].setEnabled(true);
					tf_state[0].setText(""+thread_0.getState());
				}
				if(e.getSource()==button_interrupt[0]){
					thread_0.interrupt();
					button_start[0].setEnabled(true);
					button_interrupt[0].setEnabled(false);
					tf_state[0].setText(""+thread_0.getState());
				}
				if(e.getSource()==button_start[1]){
					sleeptime1=Integer.parseInt(tf_sleep[1].getText());
					thread_1=new MyThread_1();
					thread_1.start();
					button_start[1].setEnabled(false);
					button_interrupt[1].setEnabled(true);
					tf_state[1].setText(""+thread_1.getState());
				}
				if(e.getSource()==button_interrupt[1]){
					thread_1.interrupt();
					button_start[1].setEnabled(true);
					button_interrupt[1].setEnabled(false);
					tf_state[1].setText(""+thread_1.getState());
				}
				if(e.getSource()==button_start[2]){
					sleeptime2=Integer.parseInt(tf_sleep[2].getText());
					thread_2=new MyThread_2();
					thread_2.start();
					button_start[2].setEnabled(false);
					button_interrupt[2].setEnabled(true);
					tf_state[2].setText(""+thread_2.getState());
				}
				if(e.getSource()==button_interrupt[2]){
					thread_2.interrupt();
					button_start[2].setEnabled(true);
					button_interrupt[2].setEnabled(false);
					tf_state[2].setText(""+thread_2.getState());
				}
			}
		}

		public static void main(String args[]) {
			new Test3("滚动字");
		}
}


java多线程实验 滚动字

时间: 2024-08-19 13:34:41

java多线程实验 滚动字的相关文章

java多线程并发系列之锁的深入了解

上一篇博客中 : java多线程.并发系列之 (synchronized)同步与加锁机制 .介绍了java中Synchronized和简单的加锁机制,在加锁的模块中介绍了 轮询锁和定时锁,简单回顾下 轮询锁:利用tryLock来获取两个锁,如果不能同时获得,那么回退并重新尝试. 定时锁:索取锁的时候可以设定一个超时时间,如果超过这个时间还没索取到锁,则不会继续堵塞而是放弃此次任务. 锁的公平性 在公平的锁上,线程将按照它们发出请求的顺序来获取锁 上面似乎忘记了还有一种可中断锁和可选择粒度锁 可中

线程基础,滚动字,“尼玛炸了!!!”有BUG请大婶指出

import java.awt.FlowLayout; import java.awt.GridLayout; import java.awt.Panel; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swi

java多线程系列(二)

对象变量的并发访问 前言:本系列将从零开始讲解java多线程相关的技术,内容参考于<java多线程核心技术>与<java并发编程实战>等相关资料,希望站在巨人的肩膀上,再通过我的理解能让知识更加简单易懂. 目录 认识cpu.核心与线程 java多线程系列(一)之java多线程技能 java多线程系列(二)之对象变量的并发访问 java多线程系列(三)之等待通知机制 java多线程系列(四)之ReentrantLock的使用 线程安全 线程安全就是多线程访问时,采用了加锁机制,当一个

java多线程并发概览

一.操作系统中线程和进程的概念 现在的操作系统是多任务操作系统.多线程是实现多任务的一种方式. 进程是指一个内存中运行的应用程序,每个进程都有自己独立的一块内存空间,一个进程中可以启动多个线程.比如在Windows系统中,一个运行的exe就是一个进程. 线程是指进程中的一个执行流程,一个进程中可以运行多个线程.比如java.exe进程中可以运行很多线程.线程总是属于某个进程,进程中的多个线程共享进程的内存. "同时"执行是人的感觉,在线程之间实际上轮换执行. 二.Java中的线程 在J

带你玩转java多线程系列 “道篇” 多线程的优势及利用util.concurrent包测试单核多核下多线程的效率

java多线程 “道篇” - 多线程的优势及用concurrent包测试单核多核下多线程的效率 1 超哥对于多线程自己的理解 2 测试代码 3 CountDownLatch这个同步辅助类科普 4 如何把电脑设置成单核 5 测试结果 1 超哥对于多线程自己的理解 超哥的理解:对于多线程,无非是对于顺序执行下任务的一种抽取和封装,将原来顺序执行的任务单独拿出来放到线程类的run方法中,通过线程类的start方法进行执行,对于多线程访问共同资源时,我们需要加锁,也就是只有某个线程在拥有锁的时候,才能够

南邮JAVA程序设计实验4 线程程序设计(指针式时钟)

南邮JAVA程序设计实验4  线程程序设计(指针式时钟) 实验目的: 本实验旨在通过实验,培养学生将JAVA 线程的相关知识点(包括线程调度,线程同步等)有机结合并加以综合应用,在实验中设计多线程程序的能力. 实验内容: 设计和编写一个编写一个指针式时钟程序,应用线程实现时钟的走动. 实验设计: 主要是控制时针分针秒针的转动度数,这个直接通过坐标的三角函数值求得,线程方面,隔一秒休眠一下,然后通过时分秒的换算关系来改变三个对应指示针在时钟上的位置 实验代码: import java.awt.*;

JAVA读书推荐----《深入分析Java Web技术内幕》--《java多线程编程核心技术》--《大型网站技术架构 核心原理与案例分析》-《Effective Java中文版》

(1)  首先推荐的不是一本书,而是一个博客,也是我们博客园另外一位博友java_my_life. 目前市面上讲解设计模式的书很多,虽然我前面讲了看书是最好的,但是对设计模式感兴趣的朋友们,我推荐的是这个博客.这位博友的设计模式讲得非常非常好,我认为90%的内容都是没有问题且很值得学习的,其讲解设计模式的大体路线是: 1.随便开篇点明该设计模式的定义 2.图文并茂讲解该设计模式中的结构 3.以详细的代码形式写一下该种设计模式的实现 4.补充内容 5.讲解该设计模式的优缺点 对于一个设计模式我们关

Java程序设计实验 实验五

课程:Java程序设计实验   班级:1353  姓名:符余佳源  学号:20135321 成绩:                           指导教师:娄嘉鹏      实验日期:2015.6.9 实验密级:无            预习程度:                   实验时间:15:30~18:00 仪器组次:  21                    必修/选修: 选修                  实验序号:5 实验名称:TCP传输及加解密 产品托管地址:ht

摩根斯坦利面试——Java多线程

今天上午,参加大摩的面试,自觉失败,记录一下过程. 面试官看着简历,并没有就简历提问,整个过程都在问java多线程的问题. 1. ReentrantLock,作为可重入锁,怎么理解"可重入"二字,有没有不可重复的锁? 我:获得对象锁的线程能够再次获得对象锁,访问对象--被鄙视了,后来想想,应该把递归这种场景说下: 2.生产者-消费者模型怎么实现? 我:使用synchronized或者Lock这些同步方法实现. 面试官就问,为什么不用一些更高级的封装呢? 我:可以使用Exchanger类