Java-thread(多线程)

1.多线程简介

image.png
image.png

操作系统的最小单元:进程
进程在运行的时候: 保证至少有一条线程或多条线程在进行操作
进程内部 包含 线程

Java中:开启一个线程 将main方法入栈
一个线程相当于一个栈 多个线程相当于多个栈

package com.lty.yu;

public class Test05 {
    //线程
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        for(int i = 0 ;i<100 ; i++) {
            System.out.println(Thread.currentThread().getName()+":"+i);
        }

    }

}

2.实现多线程的俩种方式

image.png
image.png

3.线程与进程的五种状态

image.png

(1)New(新建状态)

start(); 新开辟一个线程

(2)Runnable(可运行状态)

可以等待被运行

(3)Running(运行状态)

正在执行

(4)Block(阻塞状态)

sleep() ; 先别执行我,执行别人

(5)Dead(死亡状态)

所有方法都被执行完毕包括main();方法,再栈中依次出栈

4.实现多线程的俩种方式--------代码讲解部分

package com.lty.yu;

public class Test05 {
    //线程
    public static void main(String[] args) {//名字为main 的线程或栈是java 虚拟机自动帮助我们完成的
        // TODO Auto-generated method stub
        new Test05().method2();
        //start 1.开辟新的栈将run方法入栈   2.执行run方法 ------------》开辟新的线程
        new ThreadTest05().start();//默认 Thread-0
        RunnableTest rt1 = new RunnableTest();
        Thread t = new Thread(rt1);
        t.start();
        for(int i = 0 ;i<100 ; i++) {
            System.out.println(Thread.currentThread().getName()+":"+i);
            try {
                Thread.sleep(10);
            } catch (InterruptedException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
        /*
         * 想实现多线程,有俩种方式:
         * 1.继承Thread类
         * 使用方法:a.一个类继承Thread类  b.重写run方法 c.调用start方法 激活新的线程
         * 2.实现Runnable接口
         * 使用方法:a.一个类继承Runnable接口 b.重写run方法 
         * c.通过线程 将Runnable对象作为成员变量输入 (相当于重写run方法) 
         * d.调用线程对象的 start 方法激活新线程
         */
        

    }
    
    public void method2() {
        
        System.out.println("method2");
    }

}
package com.lty.yu;

public class ThreadTest05 extends Thread{
    
    public void run() {//thread 类中有一个方法  空参run方法
        for (int i = 0; i < 100; i++) {
            System.out.println(Thread.currentThread().getName()+":"+i);
            try {
                Thread.sleep(10);
            } catch (InterruptedException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
    }
    public void method1() {
        System.out.println("threadtest05method1");
    }
}

package com.lty.yu;
        //实现接口
public class RunnableTest implements Runnable{

    @Override
    public void run() {
        // TODO Auto-generated method stub
        for(int i = 0; i < 100; i++) {
            System.out.println(Thread.currentThread().getName()+":"+i);
            try {
                Thread.sleep(10);
            } catch (InterruptedException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
        
    }

}

5.线程小练习

package com.lty.yu;

public class Test06 {
    public static void main(String[] args) {
        //1.通过用Runnable 实现 1~100的输出 俩个线程同时输出
        Run R1 = new Run();
        Thread t1 = new Thread(R1);
        t1.setName("Runnable线程1");
        Thread t2 = new Thread(R1);
        t2.setName("Runnable线程2");
        t1.start();
        t2.start();
        
        //2.用继承Thread类的方法   实现1~100的输出 俩个线程同时输出
/*      Run02 R1 = new Run02();
        R1.setName("线程1");
        Run02 R2 = new Run02();
        R2.setName("线程2");
        R1.start();
        R2.start();*/
        
    }

}

(1)通过用Runnable 实现 1~100的输出 俩个线程同时输出

package com.lty.yu;

public class Run implements Runnable{
    //1.通过用Runnable 实现 1~100的输出 俩个线程同时输出
    @Override
    public void run() {
        // TODO Auto-generated method stub
        for(int i = 0; i <= 100; i++) {
            System.out.println(Thread.currentThread().getName()+":"+i);
            try {
                Thread.sleep(10);
            } catch (InterruptedException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            
        }
        
    }
    
}

(2)用继承Thread类的方法 实现1~100的输出 俩个线程同时输出

package com.lty.yu;

public class Run02 extends Thread {
    // 2.用继承Thread类的方法 实现1~100的输出 俩个线程同时输出
    @Override
    public void run() {
        for (int i = 0; i <= 100; i++) {

            System.out.println(Thread.currentThread().getName() + ":" + i);
            try {
                Thread.sleep(10);
            } catch (InterruptedException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }

    }
}

你可能感兴趣的:(Java-thread(多线程))