java中的线程和多线程

来源:互联网 发布:口红与经济数据表格 编辑:程序博客网 时间:2024/05/21 02:33

说道线程,首先我们要先知道什么是进程。

1.什么是进程?

进程:说白了就是一个正在执行的程序。好比你经常玩的LOL,经常编码用的eclipse等都是一个进程。

在每一个进程中,都有一个控制单元。

2.什么是线程?

  线程:其实就是进程中的每一个控制单元。也就是说线程控制着进程的执行顺序。

          打个比方,好比一个服装店(进程)只有一间试衣间(一个线程),

   但这个时候同时有很多顾客,但这个时候每次只能有一个顾客能进入试衣间试衣服。

3.创建线程有几种办法?

a.extends Thread类。。(Thread的底层其实也是Ruannable接口)

b.implements Runnable这个接口。

记住:(1)无论是继承还是实现,都要重写里面的run方法。最后调用start方法来启动线程。

    (2)实现Runnable接口后,在调用的时候要先通过Thread类建立对象,然后再调用start()方法。

Ticket t1 = new Ticket();Thread t = new Thread(t1);

4.线程在什么时候会被启动?

 在JVM启动的时候首先创建了一个java.exe的进程,这个进程中至少有一个线程,这个线程存放在main方法。当程序运行的时候,线程被调用,也就是说main方法执行的时候

里面定义的线程和主线程会被调用,当结束的时候GC(垃圾回收)线程也会被调用。(这个时候也能被称为多线程的运行)。

public static void main(String[] args) {Test t1 = new Test("one");Test t2 = new Test("two");t1.start();t2.start();for(int i =0;i<50;i++){System.out.println("main ----  "+i);}}}class Test extends Thread{public Test(String name){super(name);}@Overridepublic void run() {for(int i =0;i<50;i++){System.out.println(this.getName()+"----  "+i);}}
运行的结果:线程是交替执行的,不是执行完一个线程再去执行另一个线程的,而且每次执行的结果也是不同的。

注意:这里在执行线程的时候,是调用线程中的start()方法来执行线程的,而不是调用被重写的run方法来执行线程的。(这里你可以调用run()方法来看看结果)

5.线程执行的五个步骤:



6.如何解决多线程中的线程执行顺序的问题

给用到线程的地方加一个同步机制,也就是 synchronized关键字。

有两种方式加synchronized关键字,

(1)是在run()里面在需要被用到线程的地方加上关键字。以购票系统来说吧,多个人想买票,这个票就是要被多个人购买(这就是多线程的地方)。

public void run() {while(true){synchronized(this){if(ticket>0){System.out.println(Thread.currentThread().getName()+"----sale:"+ticket- -);}}}
注意:如果要被synchronized关键字修饰的方法中有static关键字,那么这个方法中synchronized(当前对象名.class)

这么写,是因为 静态进内存时,内存中没有本类对象,但是一定有该类对应的字节码文件对象,类名.class。


(2)是加在run()方法上,但是这种方式延缓执行时间。

public synchronized void run()



0 0
原创粉丝点击