java基础-线程的基本方法与代码举例
2021/8/15 9:05:55
本文主要是介绍java基础-线程的基本方法与代码举例,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
线程基本方法
线程的生命周期(枚举是一种引用数据类型)
public enum State { NEW, //新建状态,创建了线程对象 RUNNABLE, //(睡眠完成之后||等待事件消除转为就绪)调用start方法,就绪状态 就绪状态或者了cpu使用权,转为运行状态(枚举未有) ;失去cpu执行权,或者调用了 yield()方法 转为 就绪状态 BLOCKED, //阻塞状态,同步等待锁对象池 获得锁对象转为就绪状态 WAITING, //等待状态 1)sleep() 2)join() 3)wait() TIMED_WAITING, //等待状态 TERMINATED; //终止状态 1)run方法运行结束 2)调用stop方法 }
常用方法:线程睡眠-sleep()
/*线程休眠:Thread.sleep(2000) *1)静态方法,通过类名调用 * 2)sleep()方法所在的线程睡眠 * 3)2000为毫秒 * */ public class ThreadSleep { public static void main(String[] args) { Thread t1 = new Thread(new Runnable() { @Override public void run() { for(int i=0;i<100;i++){ System.out.println(Thread.currentThread().getName()+i); //当i为20,睡眠5秒 if(i==20){ try { Thread.sleep(5000); //run()定义没有抛出异常,重写也不能抛出异常 } catch (InterruptedException e) { e.printStackTrace(); } } } } }); t1.start(); } }
常用方法:线程中断-interrupt()
//线程中断 public class ThreadInterrupt { public static void main(String[] args) { Thread t1 = new Thread(new Runnable() { @Override public void run() { for(int i=0;i<100;i++){ System.out.println(Thread.currentThread().getName()+i); //当i为20,睡眠5秒 if(i==20){ try { Thread.sleep(5000); //run()定义没有抛出异常,重写也不能抛出异常 //如果当前线程睡眠中断会产生异常 } catch (InterruptedException e) { e.printStackTrace(); } } } } }); t1.start(); //main线程 for(int i=1;i<70;i++){ System.out.println(Thread.currentThread().getName()+"----<"+i); } //当main线程结束,将t1唤醒 t1.interrupt(); } }
常用方法:线程让步-yield()
public class ThreadYield { public static void main(String[] args) { Thread t1 = new Thread(new Runnable() { @Override public void run() { for(int i=0;i<100;i++){ System.out.println(Thread.currentThread().getName()+1); if(i%10==0){ Thread.yield(); //线程让步,当前线程会释放cpu执行权,转为就绪状态 } } } }); t1.start(); Thread t2 = new Thread(new Runnable() { @Override public void run() { for(int i=0;i<100;i++){ System.out.println(Thread.currentThread().getName()+"---->"+1); } } }); t2.start(); } }
常用方法:线程的加入-join();
public class ThreadJoin { public static void main(String[] args) { Thread t1 = new Thread(new Runnable() { @Override public void run() { for(int i=1;i<50;i++){ System.out.println(Thread.currentThread().getName()+i); } } }); t1.start(); Thread t2 = new Thread(new Runnable() { @Override public void run() { for(int i=1;i<50;i++){ System.out.println(Thread.currentThread().getName()+i); if(i==20){ try { t1.join();//当i=20,加入t1线程,当前线程转为等待状态,等t1线程执行完之后,当前线程转为就绪状态 } catch (InterruptedException e) { e.printStackTrace(); } } } } }); t2.start(); } }
常用方法:线程的终止
线程终止-第一种方法 stop()
Thread t1 = new Thread(new Runnable() { @Override public void run() { for(int i=0;i<100;i++){ System.out.println(Thread.currentThread().getName()+i); } } }); t1.start(); for(int i=0;i<20;i++){ System.out.println(Thread.currentThread().getName()+"---->"+i); } t1.stop();//main方法结束 将t1线程终止
线程终止第二种方法:run()运行结束,在线程中设置一个标志,定期判断这个标志是否变化,标志发生变化,就退出run()方法
public class ThreadStop extends Thread { boolean running = true;//线程运行标志 public void run() { for (int i = 0; running & i < 300; i++) { System.out.println(Thread.currentThread().getName() + "---" + i); } } } class test10 { public static void main(String[] args) { ThreadStop t1 = new ThreadStop(); t1.start(); for (int i = 0; i < 100; i++) { System.out.println(Thread.currentThread().getName() + "main----" + i); } t1.running = false;//修改子线程的标志 } }
public class ThreadStop1 implements Runnable{ boolean stopping = false; @Override public void run() { for(int i=1;i<300;i++){ if(stopping){ return;//结束run方法执行 } System.out.println(Thread.currentThread().getName()+"----"+i); } } } class test11{ public static void main(String[] args) { ThreadStop1 t2=new ThreadStop1(); new Thread(t2).start(); //main线程 for(int i=1;i<=100;i++){ System.out.println(Thread.currentThread().getName()+i); } t2.stopping=true;//修改实现类 的标志 } }
这篇关于java基础-线程的基本方法与代码举例的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-01后台管理开发学习:新手入门指南
- 2024-11-01后台管理系统开发学习:新手入门教程
- 2024-11-01后台开发学习:从入门到实践的简单教程
- 2024-11-01后台综合解决方案学习:从入门到初级实战教程
- 2024-11-01接口模块封装学习入门教程
- 2024-11-01请求动作封装学习:新手入门教程
- 2024-11-01登录鉴权入门:新手必读指南
- 2024-11-01动态面包屑入门:轻松掌握导航设计技巧
- 2024-11-01动态权限入门:新手必读指南
- 2024-11-01动态主题处理入门:新手必读指南