JAVA 线程学习 - Thread了解
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 }