1 public class ThreadKnow
2 {
3 private TimeThread timeThread;
4 private boolean flag;
5
6 public ThreadKnow()
7 {
8 /*************************创建线程************************/
9 //自定义线程构建方式一 继承Thread类
10 // public class MyThreadExam1 extends Thread
11 // {
12
13 //自定义线程构建方式二:实现Runnable接口
14 // public class MyThreadExam2 implements Runnable
15 // {
16
17 //对于需要在线程中执行的操作,可以重写父类的run()方法,并在方法中添加操作代码
18
19 /*************************线程中控制状态的使用************************/
20 /***一***/
21 //Thread.sleep()只能对当前运行的线程进行阻塞
22 //sleep在进入阻塞状态后只有到达时间毫秒后自动苏醒,任意方式打断处于sleep状态的线程都将引起异常
23 //sleep在进入阻塞状态后该线程所使用的到其他对象都将处于锁定的状态(sleep阻塞不会释放对象锁)
24 /***二***/
25 //当发生多个线程公用一个对象时,为防止该对象被随意使用,可以使用同步快对对象进行控制,为对象加上对象锁
26 //对象所只能对对象有作用:即对基本数据类型时没作用的
27 // synchronized (list)
28 // {
29 // //操作代码
30 // }
31 /***三***/
32 //加入线程队列中,等待线程执行完毕
33 // timeThread.join();
34 /***四***/
35 //强制终止该线程
36 timeThread.stop();
37 /***五***/
38 //挂起线程,但是会保留对象锁
39 timeThread.suspend();
40 /***六***/
41 //继续挂起的线程,和suspend搭配使用
42 timeThread.resume();
43 /***七***/
44 //将该线程加入到执行队列中,等待该线程的执行完毕
45 // timeThread.join();
46 /***八***/
47 //暂停当前正在执行的线程,并执行其他线程
48 timeThread.yield();
49
50 /***九***/
51 //线程等待:该方法是Object对象的方法,但是也可以控制线程,而且会释放对象锁
52 // new Object().wait();
53 /***十***/
54 //线程唤醒:同样是Object对象的方法,需要搭配使用wait()使用
55 new Object().notify();
56
57 //创建线程
58 timeThread = new TimeThread();
59 //开启线程
60 timeThread.start();
61 //判断线程的状态
62 if(timeThread.getState() == State.NEW)
63 {
64 }
65 else
66 {
67 }
68 //打断线程,并不能阻止线程的停止,修改线程的状态
69 timeThread.interrupt();
70 //暂停线程,将线程挂起
71 timeThread.suspend();
72 //继续线程,将使用suspend挂起的线程继续执行
73 timeThread.resume();
74 }
75
76 public static void main(String[] args)
77 {
78
79 }
80 /**
81 * 显示时间的线程
82 * @author Administrator
83 *
84 */
85 private class TimeThread extends Thread
86 {
87
88 @Override
89 public void run()
90 {
91 while(true)
92 {
93 if(flag)
94 {
95 String time = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss").format(new Date());
96 // lblTime.setText(time);
97 try
98 {
99 Thread.sleep(1000);
100 } catch (InterruptedException e)
101 {
102 // TODO Auto-generated catch block
103 e.printStackTrace();
104 }
105 }
106
107 }
108 }
109
110 }
111 }