在Java中,每次程序运行至少启动2个线程。一个是main线程,一个是垃圾收集线程。因为每当使用Java命令执行一个类的时候,实际上都会启动一个jvm,每一个jvm实际在就是在 *** 作系统中启动了一个进程。
那么什么是线程,什么是进程?如何创建线程呢?
1.什么是线程、什么是进程
一般的定义:进程是指在 *** 作系统中正在运行的一个应用程序,线程是指进程内独立执行某个任务的一个单元。
怎么理解呢?
比如说QQ是是一个进程,如果你在和A朋友语音聊天的同时和B朋友打字聊天,同时还在QQ群下载图片,这三个 *** 作就相当于开启了三个线程,可以说有了线程之后我们设计的程序就可以一边执行A *** 作,一边执行B *** 作了。
线程和进程有什么区别呢?首先最直观的就是:一个进程可拥有多个线程。 具体比较:
*调度*
进程拥有资源; 线程是调度和分派的基本单位; 同一进程中线程的切换不会引起进程的切换; 进程间的线程切换则会引起进程切换从而导致资源切换等。
*并发性 *
进程和进程之间可并发执行 ; 线程:除了进程间的并发执行还可以线程之间并发执行; 线程的并发性更高。
*拥有资源 *
线程并不能拥有资源,只有进程才拥有资源。
*系统开销 *
进程创建、切换和撤销都会导致系统为之创建或者回收进程控制卡以及资源,但是线程的创建以及线程间的切换并不会引起系统做这些事儿,所以线程的系统开销明显更小。
2.如何创建线程 1.继承Thread类;我们可以使用继承Thread类的方式来创建一个线程。 创建一个类来继承Thread类,重写父类的run方法,就实现了创建我们自己的线程了。之后调用线程的start方法,就算是开启了一个线程了。
class MyThread extends Thread{ private String name; public MyThread(String name) { super(); this.name = name; } public void run() { System.out.println("线程" + name +"开始运行"); for (int i = 0; i < 5; i++) { System.out.println("线程" + name + "运行" + i); } System.out.println("线程" + name + "结束"); } } public class Test { public static void main(String[] args) { Thread t = new MyThread("T!"); t.start(); Thread t2 = new MyThread("T2"); t2.start(); } }
运行结果:
2.实现Runnable接口。最简单创建线程的方法就是实现一个Runnable接口了,实际上所有的线程都是直接或者间接实现了Runnable接口的,上一个例子中Thread类其实就实现了Runnable接口。
class MyThread implements Runnable { private String name; private Thread mythread; public MyThread(String name) { super(); this.name = name; } public void run() { for (int i = 0; i < 5; i++) { System.out.println("线程" + name + "运行" + i); } System.out.println("线程" + name + "结束"); } public void start() { System.out.println("线程开始: " + name); if (mythread == null) { mythread = new Thread(this, name); mythread.start(); } } } public class Test { public static void main(String[] args) { MyThread t1 = new MyThread("T1"); t1.start(); MyThread t2 = new MyThread("T2"); t2.start(); } }
运行结果:
3. 通过Callable 创建线程 4.通过Future 创建线程总结:使用Callable创建线程和Runnable接口方式创建线程比较相似,不同的是,Callable接口提供了一个call () 方法作为线程执行体,而Runnable接口提供的是run ()方法,同时,call ()方法可以有返回值,而且需要用FutureTask类来包装Callable对象。
进程是指一种“自包容”的运行程序,有自己的地址空间;一般来说运行中的应用程序称为“进程”,进程中能够独立执行的控制流称为“线程”。线程是进程内部单一的一个顺序控制流 。
一个进程可以由多个线程组成,他们分别执行不同的任务。当进程的多个线程同时运行时,这种运行方式叫做“并发”。
基于线程的多任务处理环境中,线程是最小的处理单位。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)