线程相关知识

来源:互联网 发布:x的平方c语言 编辑:程序博客网 时间:2024/06/15 20:38

1 进程与线程的区别

一个程序最少有一个进程,一个进程最少有一个线程,线程是进程的一个实体。

进程有自己独立的地址空间,而多个线程共享进程之间的资源。

一个线程可以创建和撤销另一个线程,一个进程中的多个线程可以并发执行。

线程有自己的堆栈和局部变量,但没有独立的内存空间,一个线程被损坏后整个进程死掉,所以多进程比多线程更健壮。


2  线程的五种状态:创建、就绪、运行、堵塞、死亡。

3 创建线程两种方式:实现Runnable接口和继承Thread类

两者区别:Java类只能单继承。继承Thread类不能扩展其他的类。可以用实现Runnable接口的方式避免单继承的局限性

  继承Thread类创建线程只需创建类的实例,实现runnable接口创建线程需要创建类的实例后再new thread()

   继承thread类创建的多线程各自拥有自己的资源,虽然执行的是相同代码,但是互不干扰,实现Runnable接口创建的线程使多个线程共享同一份资源。

例如

继承thread类的方法

public class ThreadTest extends Thread{


private int num=100;
@Override
public synchronized  void run() {
while(num>0){
System.out.println(num--+Thread.currentThread().getName());
}
}
public static void main(String[] args) {
ThreadTest test1=new ThreadTest();
ThreadTest test2=new ThreadTest();
ThreadTest test3=new ThreadTest();
test1.start();
test2.start();
test3.start();
}
}

运行结果

100Thread-2
100Thread-0
100Thread-1
99Thread-0
99Thread-2
98Thread-0
99Thread-1
97Thread-0
98Thread-2
96Thread-0
98Thread-1
95Thread-0
94Thread-0

。。。

结果显示这三个线程并不是依次交替执行,而是在三个线程同时被执行的情况下,有的线程被分配时间片的机会多,有的线程分配的时间片少。三个线程共执行300次。

实现runnable接口的方法

public class ThreadTest2 implements Runnable{
private int num=100;
@Override
public synchronized void run() {
while(num>0){
System.out.println(num--+Thread.currentThread().getName());
}
}
public static void main(String[] args) {
ThreadTest2 test1=new ThreadTest2();
Thread t1=new Thread(test1);
Thread t2=new Thread(test1);
Thread t3=new Thread(test1);
t1.start();
t2.start();
t3.start();
}
}

执行结果:共执行100次。如多个窗口卖电影票,必须用实现runnable接口


0 0
原创粉丝点击