java之创建线程

目录

创建线程

Thread类常用方法


创建线程

主线程

 

单线程的弊端:从上至下的执行

Person类中有一个循环打印方法run

 

  public static void main(String[] args) {

        Person p1=new Person("小强");

        p1.run();

        System.out.println(0/0);//写一个异常

        Person p2=new Person("旺财");

        p2.run();

    }

可得p2.run没有执行

 

 

Thread类

线程是程序中的执行线程,Java虚拟机允许应用程序并发地运行多个执行线程。

 

 

创建新执行线程的两种方法

 

多线程的第一种方式

Thread类是描述线程的类,我们要实现多线程程序,就必须继承Thread类

实现步骤

    1、创建一个Thread类的子类

    2、在Thread类的子类中重写run方法,设置线程任务

    3、创建Thread类的子类对象

    4、调用Thread类中的方法start,开启新的线程,执行run方法

  结果是两个线程并发的运行;当前线程(从调用返回给start方法)和另一个线程(执行其run方法)。

  多次启动一个线程是非法的,特别是当线程已经结束执行后,不能再重新启动。

调度问题:java是抢占式,看优先级,同一优先级,随机选择一个执行

*/

public class Demo2 {

    public static void main(String[] args) {

        MyThread myThread=new MyThread();

        myThread.start();

        for (int i=0;i<20;i++){

            System.out.println("main"+i);

        }

    }

}

多线程类

public class MyThread extends Thread {

    @Override

    public void run() {

        for (int i=0;i<20;i++){

            System.out.println("run"+i);

        }

    }

}

 

 

多线程原理:

JVM执行main方法,找OS开辟一条main方法通向cpu的路径,该路径叫做main线程、主线程

cpu通过该路径执行main方法

当创建多线程类对象的时候就又开辟了新的路线,执行run方法

当优先级相同,main和run会抢夺cpu执行权,谁抢到了谁就执行对应的代码

 

内存图解

Thread类常用方法

Thread类的常用方法

获取线程的名称:

    1、getName()返回线程的名称

    2、获取当前正在执行的线程,使用线程中的方法getName()获取名称

        static Thread currentThread()返回对当前正在执行线程对象的引用

由执行的结果可得:

    线程的名称:

    主线程:main

    新线程:Thread-0开始、Thread1...

*/

public class Demo3 {

    public static void main(String[] args) {

        MyThread myThread=new MyThread();

        myThread.start();//Thread-0

       new MyThread().start();

       new MyThread().start();

       //也可以获取主线程的名称

        System.out.println(Thread.currentThread().getName());

    }

}

 

run方法:

public void run() {

       //获取线程名称

       /* System.out.println(getName());*/

       /* Thread thread = Thread.currentThread();

        System.out.println(thread);

        System.out.println(thread.getName());*/

        //链式写法

        System.out.println(Thread.currentThread().getName());

    }

 

设置线程的名称:

1、使用Thread类中的setName方法,改变线程名称,使之与参数name相同

2、创建一个带参数的构造方法,参数传递线程的名称,调用父类的带参构造方法,把线程名称传递给父类,让父类(Thread)给子线程起一个名字

 

演示:

run方法:

public void run() {

      //获取线程名称

        System.out.println(Thread.currentThread().getName());

    }

main:

 public static void main(String[] args) {

        /*方式1

        MyThread myThread=new MyThread();

        myThread.setName("小强");

        myThread.start();*/

       //方式二带参构造方法

        MyThread myThread=new MyThread("旺财");

        myThread.start();

    }

 

public static void sleep (long millis):使当前正在执行的线程以指定的毫秒数暂停(暂时停止执行)

 

演示

public class Demo5 {

    public static void main(String[] args) {

        //这里拿主线程做测试

        for (int i=0;i<=60;i++) {

            //模拟时钟1s+1

            System.out.println(i);

            try {

                //sleep会抛异常需要捕获

                Thread.sleep(1000);

            } catch (InterruptedException e) {

                e.printStackTrace();

            }

        }

    }

1s+1直到60

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值