一、线程与进程的区别
- 进程和线程之间不共享内存,也就是说系统中的进程实在独立的内存空间中运行的,而进程中的的线程则可以共享系统分派给这个进程的内存空间。线程不仅可以共享进程的内存,而且拥有属于自己的内存空间,这段内存也叫作线程栈,它是在建立线程时由系统分配的。
二、创建线程
1.使用Thread类创建线程
因为在使用Runnable接口创建线程时需要先建立一个Thread实例,所以无论是通过Thread类还是通过Runnable接口建立线程,都必须建立Thread类或它的子类的实例。Thread类的构造方法被重载8次,构造方法如下所示。
public Thread();
public Thread(Runnable target);
public Thread(String name);
public Thread(Runnable target,String name);
public Thread(ThreadGroup group,Runnable target);
public Thread(ThreadGroup group,String name);
public Thread(ThreadGroup group,Runnable target,String name);
public Thread(ThreadGroup group,Runnable target,String name,long stackSize);
上述构造方法中各个参数的具体说明如下
(1)Runnable target:实现了Runnable接口的类的实例。
(2)String name:线程的名字
(3)ThreadGroup group:当前建立的线程所属的线程组。
(4)long stackSize:线程栈的大小,这个值一般是CPU页面的整数倍。
2.Thread类多线程的实现
package mythread;
public class Thread1 extends Thread{
public void run(){
System.out.println(this.getName());
}
public static void main(String[] args){
System.out.println(Thread.currentThread().getName());
Thread1 thread1 = new Thread1();
Thread1 thread2 = new Thread1();
thread1.start();
thread2.start();
}
3.使用Runnable接口创建线程
在实现Runnable接口的类时,必须使用Thread类的实例才能创建线程。使用接口Runnable创建线程的过程分为如下两个步骤。
(1)将实现Runnable接口的类实例化。
(2)建立一个Thread对象,并将第一步实例化的对象作为参数传入Thread类的构造方法中,最后通过Thread类的start()方法建立线程。
4.Runnable接口多线程的实现
public class myRunnable implements Runnable{
private int i;
public void run(){
for(;i<100;i++){
System.out.println(Thread.currentThread().getName()+" "+i );
}
}
public static void main(String[] args){
for(int i=0;i<100;i++){
System.out.println(Thread.currentThread().getName()+" "+i);
if(i == 20){
myRunnable st = new myRunnable ();
new Thread(st,"线程1").start();
new Thread(st,"线程2").start();
}
}
}