操作线程的方法:休眠、挂起、中断

1.线程的休眠例子:实现在窗体中自动画线段的功能

实现界面:

190935376.jpg

详细代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
package  com.lixiyu;
import  java.awt.Color;
import  java.awt.Graphics;
import  java.util.Random;
import  javax.swing.JFrame;
import  javax.swing.WindowConstants;
public  class  SleepMethodTest  extends  JFrame{
/**
      *
      */
     private  static  final  long  serialVersionUID = -8195789572929250861L;
private  Thread t;
private  static  Color[]color={
     Color.BLACK,Color.BLUE,Color.CYAN,Color.GREEN,Color.ORANGE,Color.YELLOW,Color.RED,Color.PINK,Color.LIGHT_GRAY
};
private  static  final  Random rand= new  Random();
private  static  Color getC(){
     return  color[rand.nextInt(color.length)];
}
public  SleepMethodTest(){
     t= new  Thread( new  Runnable(){
         int  x= 30 ;
         int  y= 50 ;
         public  void  run(){
             while ( true ){
                 try {
                     Thread.sleep( 100 );
                 } catch (InterruptedException e){
                     e.printStackTrace();
                 }
                 Graphics graphics=getGraphics(); //创建Graphics对象
                 graphics.setColor(getC()); //设置颜色
                 graphics.drawLine(x, y,  150 , y++); //实现在窗体中画横线,100指画出来的线的长度
                 if (y>= 80 ){
                     y= 50 ;
                 }
             }
         }
     });
     t.start();
}
public  static  void  main(String[] args){
     init( new  SleepMethodTest(), 200 , 200 );
}
public  static  void  init(JFrame frame, int  width, int  height){
     frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
     frame.setSize(width,height);
     frame.setVisible( true );
}
}


2.线程的挂起例子:通过join方法实现对进度条的控制

实现界面:

191152914.jpg191205561.jpg

详细代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
package  com.lixiyu;
import  java.awt.BorderLayout;
import  javax.swing.JFrame;
import  javax.swing.JProgressBar;
public  class  JoinTest  extends  JFrame{
/**
      *
      */
     private  static  final  long  serialVersionUID = 5631108658842378793L;
private  Thread threadA;
private  Thread threadB;
final  JProgressBar progressBar= new  JProgressBar();
final  JProgressBar progressBar2= new  JProgressBar();
int  count= 0 ;
public  static  void  main(String[] args){
     init( new  JoinTest(), 200 , 150 );
}
public  JoinTest(){
     super ();
     getContentPane().add(progressBar,BorderLayout.NORTH);
     getContentPane().add(progressBar2,BorderLayout.SOUTH);
     progressBar.setStringPainted( true );
     progressBar2.setStringPainted( true );
     threadA= new  Thread( new  Runnable(){ //使用匿名内部类形式初始化Thread实例
         int  count= 0 ;
         @SuppressWarnings ( "static-access" )
         public  void  run(){ //重写run()方法
             while ( true ){
             progressBar.setValue(++count); //设置进度条的当前值
         try {
             threadA.sleep( 100 );
             threadB.join(); //使线程B调用join方法
         } catch (Exception e){
             e.printStackTrace();
         }
             }
     }
     });
     threadA.start();
                      
     threadB= new  Thread( new  Runnable(){
         int  count= 0 ;
         @SuppressWarnings ( "static-access" )
         public  void  run(){
             while ( true ){
                 progressBar2.setValue(++count);
                 try {
                     threadB.sleep( 100 );
                 } catch (Exception e){
                     e.printStackTrace();
                 }
                 if (count== 100 )
                     break ;
             }
         }
     });
     threadB.start();
     }
public  static  void  init(JFrame frame, int  width, int  height){
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
     frame.setSize(width,height);
     frame.setVisible( true );
}
}


3.线程的中断例子:interrupte()设置线程正确的停止方式

实现界面:

191406316.jpg

详细代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
package  com.lixiyu;
import  java.awt.BorderLayout;
import  javax.swing.JFrame;
import  javax.swing.JProgressBar;
public  class  InterruptedSwing  extends  JFrame{
/**
      *
      */
     private  static  final  long  serialVersionUID = 2575518138753855667L;
Thread thread;
final  JProgressBar progressBar= new  JProgressBar();
public  static  void  main(String[] args){
     init( new  InterruptedSwing(), 200 , 150 );
}
public  InterruptedSwing(){
     super ();
     getContentPane().add(progressBar,BorderLayout.NORTH);
     progressBar.setStringPainted( true );
             
     thread= new  Thread( new  Runnable(){
         int  count= 0 ;
         @SuppressWarnings ( "static-access" )
         public  void  run(){
             progressBar.setValue(++count);
             try {
                 thread.sleep( 2000 );
             } catch (InterruptedException e){
                 System.out.println( "当前线程中断" );
             }
         }
     });
     thread.start();
     thread.interrupt();
}
public  static  void  init(JFrame frame, int  width, int  height){
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
     frame.setSize(width, height);
     frame.setVisible( true );
}
}


本文转自lixiyu 51CTO博客,原文链接:http://blog.51cto.com/lixiyu/1312815,如需转载请自行联系原作者

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值