进程和线程
进程是一个程序的运行状态,进行是os分配资源(内存空间)的基本单位。
Linux系统叫task,使系统资源分配的基本单位。
资源:独立的地址空间 内核数据结果 全局变量数据段 进程描述符:PCB(process control block)
线程是一个进程中不同执行路径,执行调度的基本单位,线程共享进程的独立空间。
Linux系统中线程只是一个普通进程,只不过和其他进行共享资源。(fork函数复制一个进程,成为一个子进程)
线程新建方法
- 继承Thread,重写run方法
- 实现Runnable,重写run方法
- 实现Callable接口,重写call()方法,然后包装成java.util.concurrent.FutureTask, 再然后包装成Thread;可以获得返回值
- 线程池创建线程
public class ThreadThree implements Callable {
@Override
public Object call() throws Exception {
return System.currentTimeMillis();
}
public static void main(String[] args) throws ExecutionException, InterruptedException {
FutureTask<?> task = new FutureTask<>(new ThreadThree());
new Thread(task).start();
System.out.println(task.get()); //获得返回值
}
}
线程状态6种
打断
public void interrupt()打断线程,其实就是设置标志位
public static boolean interrupted()查询是否被打断,并重置标志位置
public boolean isInterrupted() 查询是否被打断,其实就是查询标志位
可以被打断的方法
synchronized不可以被打断
public static native void sleep(long millis) throws InterruptedException;
public final void join() throws InterruptedException;
public final native void wait(long timeout) throws InterruptedException;
ReentrantLock中public void lockInterruptibly() throws InterruptedException