前言 |
吐槽csdn,刚才写好了,结果保存的时候卡死了!好气哦!项目上个星期在等投标的结果,所以没有什么事情,就抓紧时间把《Java多线程核心技术》敲了一遍,今天就来总结总结里边的知识点
概念 |
进程:cpu中运行的exe,一个进程包含很多线程
线程:进程中独立运行的子任务
举例:我们运行一个QQ程序,其实就是一个QQ的进程,我们在聊天的同事还可以干许多其他的事情,比如传个资料,逛逛qq空间等等,这些子任务就是一个个的线程
多线程的优点:最大限度利用CPU的空闲时间来处理其他任务
举个例子:qq传个大电影,要10分钟左右,但是在等待的时候,也不会影响你的其他操作。
但需要明确的一点是cpu(单核)并是同时运行着多个线程,而是在多个线程中切换,因为速度很快,让用户感觉是在同时进行着多个任务。系统的运行效率会大大得到提升,使用多线程也就是使用异步
创建线程 |
一.继承Thread类
public class ThreadDemo extends Thread {
@Override
public void run(){
super.run();
System.out.println("我是ThreadDemo子线程!");
}
}
public static void main(String[] args) {
ThreadDemo t=new ThreadDemo();
t.start();
System.out.println("结束了");
}
运行结果:
结束了
线程开始:我是ThreadDemo子线程!
- 可以发现线程的执行了调用顺序没有关系
- 使用start()方法而不是run()方法来调用线程,start()方法会通知“线程规划器” 此线程已经准备就绪,等待调用线程对象的run()方法。这个过程是让系统安排一个时间来调用,如果使用对象.run()方法就是main方法来调用,效果是同步的。也就是说必须要等到run方法执行完毕才可以执行接下来的命令
- 继承thread方法有一定的局限性,因为java不支持多继承
二、实现Runnable接口
public class RunnableThread implements Runnable {
@Override
public void run() {
System.out.println("我是RunableThread线程");
}
}
public static void main(String[] args) {
RunnableThread r=new RunnableThread();
Thread t=new Thread(r,"runnable线程");
t.start();
System.out.println("结束了");
}
- Thread类也是继承自Runnable接口的
- 使用Thread类的Thread(Runnable targer,String name);构造函数,实现多线程的启动