1. package com.rgy.Test;
  2.  
  3. import java.awt.GridLayout;
  4. import java.awt.event.ActionEvent;
  5. import java.awt.event.ActionListener;
  6.  
  7. import javax.swing.JButton;
  8. import javax.swing.JFrame;
  9. import javax.swing.JLabel;
  10. import javax.swing.JPanel;
  11. import javax.swing.JTextField;
  12. import javax.swing.WindowConstants;
  13.  
  14. public class Test3 extends JFrame{
  15. //加入属性
  16. //
  17. private JPanel panel[];
  18. private JTextField tf[];
  19. private JLabel label_sleep[];
  20. private JTextField tf_sleep[];
  21. private JButton button_start[];
  22. private JButton button_interrupt[];
  23. private JLabel label_state[];
  24. private JTextField tf_state[];
  25. private MyThread_0 thread_0;
  26. private MyThread_1 thread_1;
  27. private MyThread_2 thread_2;
  28. //
  29. private String texts[]={"Welcome","Hello","Rolly"};
  30. //
  31. private int sleeptime0;
  32. private int sleeptime1;
  33. private int sleeptime2;
  34. public Test3(String str){
  35. super(str);
  36. this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
  37. this.setBounds(500, 250, 500, 320);
  38. //加入功能代码
  39. this.setLayout(new GridLayout(6,1));
  40. tf=new JTextField[3];
  41. panel=new JPanel[3];
  42. label_sleep=new JLabel[3];
  43. tf_sleep=new JTextField[3];
  44. button_start=new JButton[3];
  45. button_interrupt=new JButton[3];
  46. label_state=new JLabel[3];
  47. tf_state=new JTextField[3];
  48. //
  49. for(int i=0;i<3;i++){
  50. panel[i]=new JPanel();
  51. tf[i]=new JTextField(String.format("%160s", texts[i]));
  52. tf[i].setHorizontalAlignment(JTextField.RIGHT);
  53. //
  54. label_sleep[i]=new JLabel("sleep");
  55. tf_sleep[i]=new JTextField(10);
  56. button_start[i]=new JButton("启动");
  57. button_interrupt[i]=new JButton("中断");
  58. label_state[i]=new JLabel("state");
  59. tf_state[i]=new JTextField(14);
  60. tf_state[i].setEditable(false);
  61. //
  62. panel[i].add(label_sleep[i]);
  63. panel[i].add(tf_sleep[i]);
  64. panel[i].add(button_start[i]);
  65. panel[i].add(button_interrupt[i]);
  66. panel[i].add(label_state[i]);
  67. panel[i].add(tf_state[i]);
  68. button_start[i].addActionListener(new button_handler());
  69. button_interrupt[i].addActionListener(new button_handler());
  70. this.add(tf[i]);
  71. this.add(panel[i]);
  72. }
  73. //
  74. this.pack();
  75. this.setVisible(true);
  76. }
  77.  
  78. class MyThread_0 extends Thread{
  79. public void run(){
  80. while(true){
  81. try {
  82. String str=tf[0].getText();
  83. tf[0].setText(str.substring(1)+str.substring(0,1));
  84. sleep(sleeptime0);
  85. } catch (Exception e) {
  86. break;
  87. }
  88. }
  89. }
  90. }
  91.  
  92. class MyThread_1 extends Thread{
  93. public void run(){
  94. while(true){
  95. try {
  96. String str=tf[1].getText();
  97. tf[1].setText(str.substring(1)+str.substring(0,1));
  98. sleep(sleeptime1);
  99. } catch (Exception e) {
  100. break;
  101. }
  102. }
  103. }
  104. }
  105.  
  106. class MyThread_2 extends Thread{
  107. public void run(){
  108. while(true){
  109. try {
  110. String str=tf[2].getText();
  111. tf[2].setText(str.substring(1)+str.substring(0,1));
  112. sleep(sleeptime2);
  113. } catch (Exception e) {
  114. break;
  115. }
  116. }
  117. }
  118. }
  119.  
  120. class button_handler implements ActionListener{
  121. public void actionPerformed(ActionEvent e) {
  122. if(e.getSource()==button_start[0]){
  123. sleeptime0=Integer.parseInt(tf_sleep[0].getText());
  124. thread_0=new MyThread_0();
  125. thread_0.start();
  126. button_start[0].setEnabled(false);
  127. button_interrupt[0].setEnabled(true);
  128. tf_state[0].setText(""+thread_0.getState());
  129. }
  130. if(e.getSource()==button_interrupt[0]){
  131. thread_0.interrupt();
  132. button_start[0].setEnabled(true);
  133. button_interrupt[0].setEnabled(false);
  134. tf_state[0].setText(""+thread_0.getState());
  135. }
  136. if(e.getSource()==button_start[1]){
  137. sleeptime1=Integer.parseInt(tf_sleep[1].getText());
  138. thread_1=new MyThread_1();
  139. thread_1.start();
  140. button_start[1].setEnabled(false);
  141. button_interrupt[1].setEnabled(true);
  142. tf_state[1].setText(""+thread_1.getState());
  143. }
  144. if(e.getSource()==button_interrupt[1]){
  145. thread_1.interrupt();
  146. button_start[1].setEnabled(true);
  147. button_interrupt[1].setEnabled(false);
  148. tf_state[1].setText(""+thread_1.getState());
  149. }
  150. if(e.getSource()==button_start[2]){
  151. sleeptime2=Integer.parseInt(tf_sleep[2].getText());
  152. thread_2=new MyThread_2();
  153. thread_2.start();
  154. button_start[2].setEnabled(false);
  155. button_interrupt[2].setEnabled(true);
  156. tf_state[2].setText(""+thread_2.getState());
  157. }
  158. if(e.getSource()==button_interrupt[2]){
  159. thread_2.interrupt();
  160. button_start[2].setEnabled(true);
  161. button_interrupt[2].setEnabled(false);
  162. tf_state[2].setText(""+thread_2.getState());
  163. }
  164. }
  165. }
  166.  
  167. public static void main(String args[]) {
  168. new Test3("滚动字");
  169. }
  170. }

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

  1. Java多线程编程核心技术(二)对象及变量的并发访问

    本文主要介绍Java多线程中的同步,也就是如何在Java语言中写出线程安全的程序,如何在Java语言中解决非线程安全的相关问题.阅读本文应该着重掌握如下技术点: synchronized对象监视器为O ...

  2. Java多线程编程那些事:volatile解惑--转

    http://www.infoq.com/cn/articles/java-multi-thread-volatile/ 1. 前言 volatile关键字可能是Java开发人员“熟悉而又陌生”的一个 ...

  3. Java多线程编程核心技术---对象及变量的并发访问(二)

    数据类型String的常量池特性 在JVM中具有String常量池缓存的功能. public class Service { public static void print(String str){ ...

  4. Java多线程详解

    Java线程:概念与原理 一.操作系统中线程和进程的概念 现在的操作系统是多任务操作系统.多线程是实现多任务的一种方式. 进程是指一个内存中运行的应用程序,每个进程都有自己独立的一块内存空间,一个进程 ...

  5. java多线程系列(二)

    对象变量的并发访问 前言:本系列将从零开始讲解java多线程相关的技术,内容参考于<java多线程核心技术>与<java并发编程实战>等相关资料,希望站在巨人的肩膀上,再通过我 ...

  6. Java多线程编程核心技术

    Java多线程编程核心技术 这本书有利于对Java多线程API的理解,但不容易从中总结规律. JDK文档 1. Thread类 部分源码: public class Thread implements ...

  7. java多线程(一)-概述

    最近这段在看java多线程编程方面的东西.所以特写了几篇文章,来总结和回顾一下自己所学习到的相关知识.因为水平有限,文章中总结不全面甚至理解错误的地方,欢迎读者指点批评. 我们平时所接触到的程序,都是 ...

  8. 初识Java多线程编程

    Java 多线程编程 Java给多线程编程提供了内置的支持.一个多线程程序包含两个或多个能并发运行的部分.程序的每一部分都称作一个线程,并且每个线程定义了一个独立的执行路径. 多线程是多任务的一种特别 ...

  9. JAVA 多线程(3)

    再讲线程安全: 一.脏读 脏读:在于读字,意在在读取实例变量时,实例变量有可能被另外一个线程更改了,导致获取到的数据出现异常. 在非线程安全的情况下,如果线程A与线程B 共同使用对象实例C中的方法me ...

随机推荐

  1. 使用sigc++插槽系统

    http://www.cppblog.com/gaimor/archive/2010/02/22/108236.html?opt=admin 我所知的c++插槽系统由3个boost的,sigslot的 ...

  2. linux 文件查找,which,whereis,locate,find

    linux 文件查找,which,whereis,locate,find 一:which 主要用于查找可执行命令的所在位置: 如图,查找命令 ls的目录: 二:whereis 主要用于查找命令的帮助文 ...

  3. which命令(转)

    原文:http://www.cnblogs.com/peida/archive/2012/11/08/2759805.html 我们经常在linux要查找某个文件,但不知道放在哪里了,可以使用下面的一 ...

  4. Linux对文件内容基本操作(学习笔记七)

    一.cat 1.1.查看文件内容 格式:cat 文件名 [root@model /]# cat /etc/resolv.conf # Generated by NetworkManager names ...

  5. element-ui 源码架构

    1.项目结构 2.src下的入口文件 https://github.com/ElemeFE/element/blob/dev/src/index.js 入口文件实现的功能为: (1)国际化配置 (2) ...

  6. html-webpack-plugin插件 根据模板生成多页面

    1.项目目录结构为: 2.webpack.config.js配置文件为: var htmlWebpackPlugin = require('html-webpack-plugin'); module. ...

  7. Cocos2d-x新建模板编译问题总汇

    0:关于使用VC模板创建模板时候脚本错误.改动..\cocos2d-x-2.2.2\template\msvc\CCAppWiz.win32\HTML\1033中文件属性中:安全->解除锁定. ...

  8. JQuery URL的GET参数值获取方法

    // jQuery url get parameters function [获取URL的GET参数值] // <code> // var GET = $.urlGet(); //获取UR ...

  9. Java学习笔记五(多线程)

    1.介绍 线程可以使程序具有两条和两条以上的可运行的路径.尤其对多核CPU特别的重要. 2.创建线程 1.继承Thread类 一个类直接的继承Thread类的话,此类就具有了线程的能力,接下来仅仅须要 ...

  10. Linux内核3.11的socket busy poll机制避免睡眠切换

    Linux的网络协议栈很独立,上下通过两个接口分别和用户态以及设备相连.也能够看作是北向和南向接口...北向通过socket接口,南向通过qdisc接口(你能够觉得是上层的netdev queue,对 ...