多线程技术基础
1、线程和进程
1、什么是进程:
是一个内存中运行的应用程序,每一个进程有一个独立的空间,可以理解为一个完成的功能程序。
2、什么是线程:
就是一个进程中的多个完成的任务线,意思是它是一个小的独立的任务,它共享同一个进程中的内存空间,自己没有单独内存空间
2、同步和异步
1、同步:
同步就是类似于排队执行,一个一个来打饭这样的
2、异步:
异步就是大家一起执行,各自做各自的事。
3、java中的多线程
java中的多线程一般都是抢占式的
每一个线程都有一个独立的栈空间,但是有共同的堆空间
多线程的实现:
(1)、继承Thread,start方法开启线程
public class ThreadTest extends Thread {
@Override
public void run() {
for (int i = 0;i<10;i++) {
System.out.println("Thread继承" + i);
}
}
}
(2)实现Runnable接口,然后调用这种对象,依然是Thread中的start方法开启线程
public class RunnableTest implements Runnable {
@Override
public void run() {
System.out.println("实现了Runnablej接口");
}
}
(3)实现Callable接口,然后创建一个FutureTask对象,然后创建线程
import java.util.concurrent.Callable;
import java.util.concurrent.FutureTask;
public class CallableUser {
public static void main(String[] args) {
Test2 t = new Test2();
FutureTask<Integer> task = new FutureTask<Integer>(t);
new Thread(task).start();
}
}
class Test2 implements Callable<Integer> {
@Override
public Integer call() throws Exception {
for(int i=0;i<10;i++) {
System.out.println(Thread.currentThread().getName() + ":" + i);
}
return 123;
}
}
4、使用Runnable接口的好处
1、线程和任务实现了分离,符合程序设计中的低耦合
2、避免了java中的单继承所带来的局限性
3、当任务过多的时候性能会比继承Thread要好