day24 Java学习 多线程

多线程(多线程的引入)

      线程 :

            * 线程是程序执行的一条路径,一个进程中可以包含多条线程。

            * 多线程并发执行可以提高程序的效率,可以同时完成多项工作。

      应用场景:

            * 服务器同时处理多个客户端请求。

多线程(多线程并行和并发的区别) 

            * 并行就是两个任务同时运行,就是甲任务进行的同时,乙任务也在运行。( 需要多个cpu)

            * 并发是指两个任务都请求运行,而处理器只能接收一个任务,就把这两个任务安排轮流进行,由于时间间隔较短,使人感觉两个任务都在运行。

多线程(多线程程序实现的方式 ) 

    * extends Thread:

public class Dome1_Thread {

public static void main(String[] args) {
        // 
         MyThread my=new MyThread();       //4.创建MyThread子类对象
         my.start();                       //5.statr()开启线程
         for (int i = 0; i <10; i++) {
            System.out.println("b");
            
        }
    }

}
 
 class MyThread extends Thread{     //1.继承Thread
     public void run() {            //2.重写run()
        for (int i = 0; i < 10; i++) {   //3.将要执行的代码放在run()中 
            System.out.println("aaa");
            
        }
        for (int i = 0; i < 10; i++) {   //将要执行的代码放在run()中 
            System.out.println("ccc");
            
        }
    }
 }
例子

    *  implements Runnable:

public class Dome1_Thread {

    public static void main(String[] args) {
        //
        MyRunnable mr = new MyRunnable();  //4.创建Runnable的子类对象
        Thread t = new Thread(mr);         //5.将其当作参数传递给Thread的构造函数
        t.start();                         //6.开启线程
        for (int i = 0; i < 10; i++) {
            System.out.println("b");

        }
    }


}
 class MyRunnable implements Runnable{      //1.定义一个类实现Runnable

    @Override
    public void run() {                     //2.重写run()
        for (int i = 0; i < 10; i++) {      //3.将要执行的代码放在run()中 
            System.out.println("aaa");
            
        }    
    }      
 }
例子

两种方式的区别:

    * 继承Thread 

                * 好处是:可以直接使用Thread类中的方法,代码简单。

                * 弊端是:如果已经有了父类,就不能用这种方法。

     * 实现Runnable接口:

                * 好处是:即使自己定义的线程类有了父类也没关系,因为父类也可以实现接口,而且接口是可以多实现的。

                * 弊端是:不能直接使用Thread中的方法需要先获取线程对象后才能得到Thread的方法。

多线程(匿名内部类实现线程)

  

public static void main(String[] args) {
        //方法1:
        new Thread() {                              // 1.继承Thread()
            public void run() {                     // 2.重写run()
                for (int i = 0; i <= 10; i++) {     // 3.将要执行的代码放在run()中
                    System.out.println("aaa");
                }
            }
        }.start();                                   // 4.statr()开启线程
        
        //方法2:
        new Thread( new Runnable() {              //1.将Runnable的子类对象传递给Thread的构造方法
            public void run() {                   // 2.重写run()
                for (int i = 0; i <= 10; i++) {   // 3.将要执行的代码放在run()中
                    System.out.println("bbb");
                }
            } 
        }).start();                               // 4.statr()开启线程
    }
例子

多线程(获取当前线程的对象)

  * Thread.currentThread() :获取当前正在执行的线程。

public static void main(String[] args) {
        new Thread() {                              
            public void run() {    
                System.out.println(this.getName() + "...aaa"); 
            }
        }.start();

        new Thread( new Runnable() {              
            public void run() {                 
                //Thread.currentThread()获取当前正在执行的线程
                    System.out.println(Thread.currentThread().getName() +"...bbb");        
            } 
        }).start();    
        // 设置主线程名字
        Thread.currentThread().setName("陈琳狗");
        //获取主线程名字
        System.out.println(Thread.currentThread().getName());

    }
例子

多线程(休眠线程)

  * Thread.sleep(毫秒 ,纳秒):控制当前线程休眠若干毫秒

   (1秒=1000 毫秒      1秒=1000*1000*1000 纳秒)

多线程(守护线程)

  *  setDaemon( ) :设置一个线程为守护线程,该线程不会单独执行,当其他非守护线程都执行结束后,自动推出。( 当传入为true就是意味着设置为守护线程。)

猜你喜欢

转载自www.cnblogs.com/feng0001/p/10977260.html
今日推荐