线程与进程:
①在多任务操作系统中,每个运行的程序都是一个进程,用来执行不同的任务,而一个进程中可以有多个执行单元同时运行,来同时完成一个或多个程序任务,这些执行单元就成为线程。
②每一个进程中至少存在一个线程。当一个Java程序启动时,就会产生一个进程,该进程回默认创建一个线程,在这个线程上运行main()方法中的代码。
两者的区别:
调度:
进程拥有资源; 线程是调度和分派的基本单位; 同一进程中线程的切换不会引起进程的切换,但是进程与线程间的切换会导致资源的切换。
并发性:
进程之间可以并发执行,线程之间也可以并发执行
线程的并发性更高
拥有资源:
线程不能拥有资源,只有进程才可以
线程的系统开销比进程的要小
我们来看一下使用Tread和Runnable创建线程的代码:
package com.company;
import java.util.*;
import java.util.Properties;
public class Task {
public static void main(String[] args) throws Exception{
ThreadClassOne t1=new ThreadClassOne();
if(t1 instanceof Thread)
t1.start(); //调用start方法开启线程
ThreadClassTwo t2=new ThreadClassTwo();
if(t2 instanceof Runnable)
t2.start();
}
}
class ThreadClassOne extends Thread {
private String name; //使用继承Thread类的方式来创建一个线程
public void run(){ //重写run方法就实现了创建我们自己的线程
for(int i=0;i<10;i++){
if(i%2!=0){
System.out.print(i);
if(i<10){
System.out.print(" ");
}
}
}
}
}
class ThreadClassTwo implements Runnable {
private String name; //通过实现Runnable接口来创建自己线程
private Thread mythread;
public void run(){
for(int i=0;i<11;i++){
if(i%2==0){
System.out.print(i);
if(i<11)
System.out.print(" ");
}
}
}
public void start(){
if(mythread==null){
mythread=new Thread(this);
mythread.start();
}
}
}
/*归纳:
创建线程的两种方式对比
实现Runnable创建线程时,线程类只是实现了Runnable接口,还可以继承其他的类。
继承Thread类创建线程时,线程类继承了Thread类,不能再继承其他类。
不过这种方式编写简单,如果需要访问当前线程,则无需使用 Thread.currentThread() 方法,
直接使用this即可获得当前线程。
*/