1.线程:
- 线程的五大状态:
-
-
线程的方法:
-
2.线程的停止:
-
不推荐使用JDK提供的stop(),destory()方法【已废用】
-
推荐线程自己停下来
-
建议使用一个标志位进行终止变量,当flag=false,则终止线程进行
-
3.线程休眠:sleep
-
sleep(时间) 指定当前线程阻塞的毫秒数
-
sleep存在异常InterruptedException
-
sleep时间达到后线程进入就绪状态
-
sleep可以模拟网络延时,倒计时等
-
每一个对象都有一个锁,sleep不会释放锁
-
例子2:模拟倒计时:
-
package New; //模拟倒计时 public class TestSleep2 { public static void main(String[] args) { try { countDown(); } catch (InterruptedException e) { e.printStackTrace(); } } public static void countDown() throws InterruptedException { int num = 10; while (true){ Thread.sleep(1000); System.out.println(num--); if (num<=0){ break; } } } }
-
例子1:模拟网络延时:
-
pa2ckage New; //模拟网络延时:放大问题的发生性 public class TestSleep implements Runnable{ //票数 private int ticketNums = 10; @Override public void run() { while (true){ if (ticketNums <=0){ break; } //模拟延时 try { Thread.sleep(100); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println(Thread.currentThread().getName()+"-->拿到了第"+ticketNums--+"张票"); } } public static void main(String[] args) { TestSleep ticket = new TestSleep(); new Thread(ticket,"小明").start(); new Thread(ticket,"小红").start(); new Thread(ticket,"小蓝").start(); } }
4.线程礼让:yield
-
礼让线程,让当前正在执行的线程暂停,但不阻塞,就是让线程重新开始竞争
-
将线程从运行状态转为就绪状态
-
让cpu重新调度,礼让不一定成功,看cpu心情
5.线程强制执行:join
-
join合并线程,待此线程执行完成后,再执行其他线程,其他线程阻塞
-
可以想象成插队
package New; public class TestJoin implements Runnable{ @Override public void run() { for (int i = 0; i < 100; i++) { System.out.println("线程vip来了"+i); } } public static void main(String[] args) throws InterruptedException { //启动我们的线程 TestJoin testJoin = new TestJoin(); Thread thread = new Thread(testJoin); thread.start(); //主线程 for (int i = 0; i < 1000; i++) { if(i == 200){ thread.join();//插队 } System.out.println("main"+i); } } }