九、Java语言基础9---多线程(创建线程,安全问题)

这些是笔者学习Java基础时的笔记,供后来者参考(学习是持之以恒的的事情,一定要坚持哟,切记!切记!!!)

1、多线程

(1)进程:正在进行的程序。
         线程:进程中的一个执行单元。
         一个进程中有多个线程在执行时,就成了多线程问题。

         多线程解决的问题:可以让多部分代码同时执行。

         例子:java中多线程例子
              main线程和垃圾回收线程同时执行。
              System.gc();//启动垃圾回器,垃圾回收器在回收每个对象垃圾时,
                                  //都会自动调用改对象的 finalize方法。

(2)为什么要启动多线程?
        因为有多部分代码需要同时执行。

(3)创建线程的两种方法
        <1>定义类,继承Thread类,覆盖Thread类中的run方法。
                实例(run方法和start方法的区别、
                          Thread.currentThread().getName()和this.getName()的区别):

                class ThreadDemo extends Thread
                {
                        String name;
                        ThreadDemo(String name){
                            this.name = name;
                        }

                        public void run(){
                               for(int i=0;i<10;i++){
                                    System.out.println(name+"------>"+Thread.currentThread().getName());
                                }
                        }
                }

                class Demo 
                {
                        public static void main(String[] args) 
                        {
                                ThreadDemo demo1 = new ThreadDemo("小明");
                                ThreadDemo demo2 = new ThreadDemo("哈哈");
                                //demo1.run();
                                //demo2.run();
                                demo1.start();
                                demo2.start();
                        }
                }

                注:通过线程对象直接调用run方法时,并没有创建新的对象。
                    调用start方法时才创建了新的线程。

       <2>创建线程的第二种方法(好处:避免了单继承的局限性)
            由来:Runnable接口其实就是将线程的任务进行的封装。

            使用:
              1、实现Runnable接口,创建类
              2、类中实现Runnable中run()方法。
              3、创建对象。
              4、创建线程对象,并将实现Runnable对象类的对象,传给线程对象。
              5、调用线程对象的start()方法。

            class Ticket implements Runnable{
                private static int num=100;
                public void run(){
                    while(true){
                        if(num>0){
                            System.out.println(Thread.currentThread().getName()+"...sale..."+num--);
                        }else{
                            break;
                        }
                    }
                }
           }

            public class SellTicket {

                public static void main(String[] args){
                    Ticket t1 = new Ticket();
                    Thread thread = new Thread(t1);
                    thread.start();
                }
            }

(4)线程的状态

pCGCl71&690.jpeg
(5)多线程的应用:售票的例子

  class Ticket extends Thread{
    private static int num=100;

    public void run(){
      while(true){
          if(num>0){
              System.out.println(Thread.currentThread().getName()+"...sale..."+num--);
          }else{
              break;
          }
        }
    }
}

public class SellTicket {
  public static void main(String[] args){
    Ticket t1 = new Ticket();
    Ticket t2 = new Ticket();
    Ticket t3 = new Ticket();
    Ticket t4 = new Ticket();
    t1.start();
    t2.start();
    t3.start();
    t4.start();
  }
}

你可能感兴趣的:(九、Java语言基础9---多线程(创建线程,安全问题))