进程:任何正在执行的应用均为进程,
线程:是程序执行流的最小单元。一个标准的线程由线程ID,当前指令指针(PC),寄存器集合和堆栈组成。相对独立。
多线程:多个线程同时操作为多进程,cpu在主线程和其他线程之间相互切换,互不影响。
创建多线程的方法一:
1.01:构造一个类继承Thread类
1.02:重写run();
1.03: 创建一个对象(即创建一个子类)
1.04: 调用start(); 开启线程并执行,同时告诉jvm,让它调用run();
//当线程的任务完成后释放线程。多线程执行时,在栈内存中,每一个执行线程都有自己的占内存空间,自动进行自己的压栈和出栈动作。执行线程结束了,线程自动在栈内存中释放;当所有的执行线程都结束了,进程就结束了。
问题一:为什么要这么做
首先,继承Thread类中的run();因为Thread类描述线程事物,具备线程应有的功能.
那么,为什么我们不直接构造子类对象调用Start();例:
Thread t=new Thread();
t.start();//理论上来说,这可行。
但是该start();调用的是Thread类中的run();而这个run();并没有我们需要的执行代码。所以需要重写run();形成run(可执行代码);并且构建子类对象调用它。
问题二: 创建线程的目的是什么?
为了建立单独运行的执行路径,让多个功能代码同时执行,也就是线程创建并指向需要给定的代码(即线程的任务)。
问题三: 调用run();和调用start();的区别
调用run();没有开启线程,仅仅是对象调用方法的行为。
调用start();开启线程并且让jvm调用重写后的run();在线程中执行.
线程名称的获取(Thread.currentThread().getName();)
用Thread类中的currentThread();//获取当前线程对象.怎么获取名称呢?
使用getName();
对于自定义的线程:Thread-1.......;
多线程的异常信息
线程中出现异常,必须标出该线程的名称。