多线程的理解一

来源:互联网 发布:mysql安装教程mac 编辑:程序博客网 时间:2024/05/16 06:53

线程


就是进程中的一个负责程序执行的控制单元(执行路径)一个进程可以多执行路径,成为多线程

进程

一个内存中运行的应用程序,每个进程都有自己独立的一块内存空间,一个进程中可以有多个线程

线程和进程的区别

1.进程有独立的进程空间,进程中的数据存放空间(堆空间和栈空间)是独立的。

2.线程的堆空间是共享的,栈空间是独立的,线程消耗的资源也比进程小,相互影响。

多线程的作用

通过提高程序对CPU的利用率提高程序的效率

多线程的实现

1、通过Thread方法

对run方法实现覆盖重写,Thread类的start方法开启线程。(thread类实现了runnable接口)

2、实现runnable接口

对run方法实现覆盖,把子类的对象传给thread类的构造方法,使用thread类的start方法开启线程。


两者之间的区别

thread实现的多线程各自完成自己的任务

runnable实现的多线程是共同完成一个任务实现,多个线程对一个资源的共享调用


多线程带来的资源同步问题

使用synchronized同步代码块

使用锁机制

package sxd.thread;public class Demo extends Thread{private int ticket = 10;public void run(){for(int x = 0;x < 10; x++){if(this.ticket > 0){System.out.println(Thread.currentThread().getName()+"ticket..."+this.ticket--);}System.out.println("...x:"+x+"...name:"+Thread.currentThread().getName());}}}package sxd.thread;public class Demo extends Thread{private int ticket = 10;public void run(){for(int x = 0;x < 10; x++){if(this.ticket > 0){System.out.println(Thread.currentThread().getName()+"ticket..."+this.ticket--);}System.out.println("...x:"+x+"...name:"+Thread.currentThread().getName());}}}



package sxd.runnable;public class Demo implements Runnable {    private int ticket = 100;@Overridepublic void run() {      show();}private void show(){for(int i = 0;i < 200;i++){synchronized (this) {if(this.ticket > 0){try {Thread.sleep(100);} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();}System.out.println(Thread.currentThread().getName()+"买票..ticket"+ this.ticket--);}}}}}//测试类package sxd.runnable;public class RunnableDemo {public static void main(String[] args) {   Demo a = new Demo();   Thread d1 = new Thread(a,"窗口1");      Thread d2 =new Thread(a,"窗口2");       d1.start();    d2.start();}   }