*1、什么是进程?什么是线程?*
进程是一个正在运行的应用程序,代表一个运行程序在内存中的执行区域;
线程是一个进程中的执行场景或执行单元,是计算机分配CPU的最小单位。
*2、进程和线程的关系:*
进程可以看做显示中的一家公司,线程就是这个公司里面的员工。
注意:
(1)进程与进程之间是独立的,不共享资源;(例如阿里巴巴和京东资源不会共享)。
(2)java中,线程A和线程B,堆内存和方法区内存共享;但是栈内存独立,一个线程一个栈。
(3)java中有多线程机制目的就是为了提高处理效率。
*3、实现多线程的两种方法:*
(建议使用方法二,面向接口编程)
*方法一:*
(1)编写一个类,直接继承Thread类,重写run()方法;
例如:
public class MyThread extends Thread{
public void run(){
}
}
(2)创建线程对象
MyThread t=new MyThread();
(3)启动线程
t.start();
*方法二:*
(1)编写一个类,实现Runnable接口,实现run()方法
例如:
public class MyRunnable implements Runnable{
public void run(){
}
}
(2)创建线程对象
Thread t=new Thread(new MyRunnable );
(3)启动线程
t.start();
*方法三: 参考* *8.实现线程的第三种方式*
创建分支线程类的时候,实现Callable接口,实现里面的call()方法。
优点:相比前两种创建线程方式,第三种可以拿到返回值。
缺点:由于在当前线程中调用分支线程的get()方法去拿返回值,会让当前线程必须等待分支线程结束才能有返回值,所以这种方式会使当前线程阻塞去等待分支线程,类似于join()方法,使效率变低。
*4、怎么获取当前线程对象?*
Thread t=Thread.currentThread();
这里的 t 就是当前线程对象。
*5、获取线程对象名字*
t.getName();
线程内部有默认的命名,如Thread-0,Thread-1,而不是t
*5、修改线程名字*
t.setName();
线程内部有默认的命名,不设置名字的话是Thread-0,Thread-1,而不是t
*6、线程优先级及代表含义*
最低优先级:1
默认优先级:5
最高优先级:10
*优先级代表含义:*
优先级越高,代表抢占的CPU时间片较多,不代表执行顺序。
优先级越高,线程先执行完的概率较大
*7、设置线程优先级:*
实例方法:setPriority(int 优先级数值)
*8、线程的合并:*
实例方法:t.join()
作用: 使 t 线程合并到当前线程中,使当前线程阻塞,直到t线程结束。类似于插队
注意: 线程合并不会合并栈,属于线程直接的协调
*9、线程的让位:*
静态方法:yield()
作用: 让当前线程暂停,由运行状态回到就绪状态,让给其它线程