创建多线程的方式&Thread类的常用方法

创建多线程的第一种方式:继承java.lang.Thread类

创建多线程的方式&Thread类的常用方法

注意:1.一个线程只能执行一次start()

           2.不能通过Thread实现类对象的 run()去启动一个线程

           3.增加加一个线程,需要新创建一个线程的对象

Thread类的常用方法:

            1.start():启动线程并执行相应的 run()方法

             2.run():子线程要执行的代码放入run()方法中

             3.currentThread():静态的,调取当前的线程

             4.getName():获取此线程的名字

             5.setName():设置此线程的名字

             6.yield():调用此方法的线程释放当前的CPU执行权

             7.join():在A线程中调用B线程的join()方法,表示:当执行到此方法,

                            A线程停止执行,直到B线程执行完毕,

                            A线程再接着join()之后的代码执行

             8.isAlive():判断当前线程是否还存活

             9.sleep(long m):显示的让当前线程睡眠m毫秒

            10.线程通信:wait()  notify()  notifyAll()

             设置线程的优先级:

                                 getPriority():返回线程优先值

                                 setPriority(int  newPriority):改变线程的优先级 

继承Thread类的匿名类的对象

TestTh

package com.aff.thread;

public class TestTh {
    public static void main(String[] args) {
        //继承Thread类的匿名类的对象
        new Thread() {
            public void run() {
                for (int i = 0; i < 100; i++) {
                    if (i % 2 == 0) {
                        System.out.println(Thread.currentThread().getName() + ":" + i);
                    }
                }
            }
        }.start();

        new Thread() {
            public void run() {
                for (int i = 0; i < 100; i++) {
                    if (i % 2 != 0) {
                        System.out.println(Thread.currentThread().getName() + ":" + i);
                    }
                }
            }
        }.start();
    }
}

创建多线程的第二种方式:通过实现的方式(只要和线程相关都离不开Runnable)

TestThread1

package com.aff.thread;

public class TestThread1 {
    /* 创建线程的方式二:通过实现的方式(只要和线程相关都离不开Runnable)
    *  
    *  对比一下继承的方式  vs  实现的方式
    *  实现的方式好些:①避免了java单继承的局限性
    *               ②如果多个线程要操作同一份资源(或数据),更适合使用实现的方式
    */
    public static void main(String[] args) {
        // 3.创建一个Runnable接口实现类的对象
        PrintNum p = new PrintNum();
        //   想要启动一个多线程, 必须调用start()
        // 4.将此对象作为形参传递给Thread类的构造器中,创建Thread类的对象,此对象即为一个线程
        Thread t1 = new Thread(p);
        // 5.调用start()方法:启动线程执行run()
        t1.start();// 启动线程: 执行Thread对象生成时,构造器形参的,对象的run()方法
        //   在创建一个线程
        Thread t2 = new Thread(p);
        t2.start();
    }
}

        // 1.创建一个实现Runnable接口的类
class PrintNum implements Runnable {
        // 2.实现接口实现方法
    @Override
    public void run() {
        for (int i = 0; i < 100; i++) {
            if (i % 2 == 0) {
                System.out.println(Thread.currentThread().getName() + ":" + i);
            }
        }
    }
}