标签:bubuko 多线程 oid 启动顺序 运行 ack run方法 extends 实现
Thread类
核心方法较多
如: 线程的启动,
如何使线程暂停,
如何使线程停止,
线程的优先级,
线程安全相关的问题
1.1进程和线程的概念及线程的优点
多线程的优点:可以最大限度地利用CPU的空闲时间来处理其他的任务
单任务环境(同步) 排队等待
多任务(多线程) 异步 大大利用CPU
1.2使用多线程
一个进程正在运行时至少会有1个线程在运行
main的线程在执行main()方法中的代码
public class Test { public static void main(String[] args) { System.out.println(Thread.currentThread().getName()); } }
1.2.1继承Thread类
实现多线程编程的方式:1.继承Thread类,2.实现Runnable接口
Thread类实现了Runnable接口,之间具有多态关系,不支持多继承,所以为了多继承,可以一边实现一边继承
class Thread implements Runnable
1.继承Thread
2.重写run()方法,写线程要执行的任务的代码
public class MyThread extends Thread{ @Override public void run() { // TODO Auto-generated method stub super.run();
System.out.println("MYthread"); } }
运行代码类如下
public class Run { public static void main(String[] args) { MyThread myThread = new MyThread(); myThread.start(); System.out.println("运行结束"); } }
线程是一个子任务,CPU以不确定的方式或者以随机的时间来调用线程中的run方法,所以就会出现先运行结束再打印MyThread的情况
注意事项:如果多次调用start(方法会出现异常)
演示线程的随机性
Thread类中的Start()方法通知"线程规划期"此线程已经准备就绪,等待调用线程的Run()方法.这个过程其实就是让系统安排一个时间来调用Thread类中的Run()方法,也就是使线程的到运行,启动线程具有异步执行的效果
如果调用thread.run()就不是异步,而是同步,那么此线程并不交给"线程规划器"来处理,而是由main主线程来调用run()方法,也就是必须等run(),方法中的代码执行完后才可以执行后面的代码
异步执行效果图
注意事项:执行Start()方法的顺序不代表启动线程的顺序,线程启动顺序与start()无关
1.2.1实现Runnable接口
如果创建的线程已经有父类了 ,则不能继承Thread类,则通过实现Runnable接口
标签:bubuko 多线程 oid 启动顺序 运行 ack run方法 extends 实现
原文地址:https://www.cnblogs.com/tanlei-sxs/p/9644147.html