多线程:并发与并行
并行:指两个或多个事件在同一时刻发生(同时发生)。
并发:指两个或多个事件在同一个时间段内发生
线程和进程区别:
进程:是指一个内存中运行的应用程序,每个进程都有一个独立的内存空间,一个应用程序可以同时运行多 个进程;进程也是程序的一次执行过程,是系统运行程序的基本单位;系统运行一个程序即是一个进程从创 建、运行到消亡的过程。
线程:进程内部的一个独立执行单元;一个进程可以同时并发的运行多个线程,可以理解为一个进程便相当 于一个单 CPU 操作系统,而线程便是这个系统中运行的多个任务。
创建线程有三种方式:继承 Runnable接口 Callable<>接口
1.继承
public class ThreadDome extends Thread {
@Override
public void run() {
System.out.println("继承多线程实现");
}
public static void main(String[] args) {
ThreadDome th1=new ThreadDome();
th1.start();
ThreadDome th2=new ThreadDome();
th2.start();
}
}
2.Runnable接口
public class RunnableDome implements Runnable {
@Override
public void run() {
System.out.println("接口多线程实现");
}
public static void main(String[] args) {
// RunnableDome th=new RunnableDome();
// Thread tr1=new Thread(th);
// tr1.start();
// Thread tr2=new Thread(th);
// tr2.start();
new Thread(new Runnable(){
@Override
public void run() {
System.out.println("接口多线程实现2");
}
}).start();
}
3.Callable<>接口
public class CallableDome implements Callable<Integer> {
@Override
public Integer call() throws Exception {
int i=0;
for (;i<20;i++){
System.out.println(Thread.currentThread().getName()+"\t"+i);
}
return i;
}
public static void main(String[] args) {
CallableDome cd=new CallableDome();
FutureTask<Integer> ft =new FutureTask<Integer>(cd);
ExecutorService es = Executors.newFixedThreadPool(2);
es.submit(ft);
try {
Integer result=ft.get();
System.out.println(result);
} catch (InterruptedException e) {
e.printStackTrace();
} catch (ExecutionException e) {
e.printStackTrace();
}
}
}