【java】--多线程原理

来源:互联网 发布:知乎怎么做微信销售 编辑:程序博客网 时间:2024/06/18 10:16

自考在《操作系统中》学到了关于进程和线程的概念,结合Demo更好的理解了多线程原理,

这篇博客主要讲一下多线程的创建和我对这个创建过程的理解。

首先展现一张思维导图


进程:是一个正在执行中的程序。

      每一个进程执行都是一个执行顺序,该顺序是一个执行路径,或者叫控制单元。

线程:就是一个进程中的一个独立的控制单元。

       线程在控制着进程的执行。

五种状态:



创建线程

方法一:(继承Thread类)

  创建步骤:1.定义类继承Threard.

            2.复写Thread类中的run方法,

            3.调用线程的start方法,

              该方法有两个作用:启动线程,调用run方法。

   

/*这是一个车站买票小例子。假设100张票,四个窗口(4个线程)*/class Ticket extends Thread{      //继承java中的Thread类,此类就是对线程这类事物的描述。private static int ticket=100;public void run(){             //实现run方法while(true){if (ticket>0){System.out.println(Thread.currentThread().getName() +"....sale"+ticket--);}}}}class TicketDemo {public static void main(String[] args){//建立四个线程          Ticket t1=new Ticket();              Ticket t2=new Ticket();              Ticket t3=new Ticket();              Ticket t4=new Ticket();  //通过start方法启动线程。              t1.start();              t2.start();              t3.start();              t4.start();}}
运行结果:(看着应该是没有问题的...)


方法二:(实现Runnable接口)

   创建步骤:

       1.定义类实现Runnable接口

       2.覆盖Runnable接口中的run方法

       3.通过Thread类建立线程对象

       4.将Runnable接口的子类对象作为实现参数传递给Thread类的构造函数。

       5.调用Thread类的start方法开启线程并调用Runnable接口子类的run方法。

/*这是一个车站买票小例子。假设100张票,四个窗口(4个线程)*/class Ticket implements Runnable{private  int tick=100;public void run(){while(true){if(tick>0){System.out.println(Thread.currentThread().getName()+"...sall...."+tick--);}}}}class TicketDemo2{public static void main(String [] args){//下面的代码,你看懂了吗?这是我要讲的了。。。。Ticket t=new Ticket();Thread t1=new Thread(t);Thread t2=new Thread(t);Thread t3=new Thread(t);Thread t4=new Thread(t);t1.start();t2.start();t3.start();t4.start();}}
运行结果假设和上面相同,省略..

解释上面代码:

通过对api的查找,java以提供了Thread类专门来描述线程。

这个类有几个值得注意的地方:

1.构造函数


2方法


总结:

就是说:先要创建线程--->调用start方法来开始线程-->java虚拟机调用run方法

        而run方法中就是线程要执行的程序。

由于,在java中单继承的局限性,java设计师就设计了一个Runnable接口,而且里面只有一个方法名,

      就是来实现run方法,创建进程。从而有了方法二。

我的理解,可以自己写一个Demo来模仿这样的过程。

/*我们将方法一,和方法二结合起来,做一下实验*/ class Thread{    private interface t;public Thread( Runnable t){this.t=t;}public void run(){t.run();}public void start()  //*必须通过start方法才能创建线程。{    this.run();}}interface Runnable {public void run(); }/*方法一    继承Thread类复写run方法创建线程类(创建Thread的子类对象),并调用start方法开启线程。*//*方法二    实现Runnable中的run方法创建线程类(创建Thread的对象),同时将线程中的运行代码加入到Thread构造方法中调用start方法开启线程。*/

        


通过对api的




         

0 0