Java--多线程的创建

Java–多线程的创建

博客说明

文章所涉及的资料来自互联网整理和个人总结,意在于个人学习和经验汇总,如有什么地方侵权,请联系本人删除,谢谢!

创建方法一(Thread)

自定义线程类

package www;

public class MyThread extends Thread{
    //    重写run方法
    @Override
    public void run(){
        for (int i = 0; i < 10; i++) {
            System.out.println("run:"+i);
        }
    }

}

测试类

package www;

public class MyThreadTest {
    public static void main(String[] args) {
        //主线程
        System.out.println("主线程");
        MyThread mt = new MyThread();
        mt.start(); //开启多线程

        for (int i = 0; i < 10; i++) {
            System.out.println("main:"+i);
        }
    }
}

Thread类

线程是程序中执行的线程。 Java虚拟机允许应用程序同时执行多个执行线程。

每个线程都有优先权。 具有较高优先级的线程优先于优先级较低的线程执行。

方法和说明 返回值
getName()返回此线程的名称。 String
getPriority()返回此线程的优先级。 int
getStackTrace()返回表示此线程的堆栈转储的堆栈跟踪元素数组。 StackTraceElement[]
getState()返回此线程的状态。 Thread.State
getThreadGroup()返回此线程所属的线程组。 ThreadGroup
interrupt()中断这个线程。 void
join()等待这个线程死亡。 void
run()如果这个线程使用单独的Runnable运行对象构造,则调用该Runnable对象的run方法; 否则,此方法不执行任何操作并返回。 void
sleep(long millis)使当前正在执行的线程以指定的毫秒数暂停(暂时停止执行),具体取决于系统定时器和调度程序的精度和准确性。 static void
sleep(long millis, int nanos)导致正在执行的线程以指定的毫秒数加上指定的纳秒数来暂停(临时停止执行),这取决于系统定时器和调度器的精度和准确性。 static void
start()导致此线程开始执行; Java虚拟机调用此线程的run方法。 void
toString()返回此线程的字符串表示,包括线程的名称,优先级和线程组。 String
yield()对调度程序的一个暗示,即当前线程愿意产生当前使用的处理器。 static void

创建方法二(Runnable)

Runnable接口应由任何类实现,其实例将由线程执行。 该类必须定义一个无参数的方法,称为run

自定义线程类

package www;

public class MyRunnable implements Runnable{

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

测试类

package www;

public class MyRunnableTest {
    public static void main(String[] args) {
        MyRunnable run = new MyRunnable();
        Thread t = new Thread(run);
        t.start();
        for (int i = 0; i < 10; i++) {
            System.out.println(Thread.currentThread().getName()+":"+i);
        }
    }
}

Thread和Runnable的区别

如果一个类继承Thread,则不适合资源共享。

但是如果实现了Runable接口的话,则很容易的实现资源共享。

实现Runnable接口比继承Thread类所具有的优势

适合多个相同的程序代码的线程去共享同一个资源。

可以避免java中的单继承的局限性。

增加程序的健壮性,实现解耦操作,代码可以被多个线程共享,代码和线程独立。

线程池只能放入实现Runable或Callable类线程,不能直接放入继承Thread的类。

扩充:在java中,每次程序运行至少启动2个线程。一个是main线程,一个是垃圾收集线程。因为每当使用 java命令执行一个类的时候,实际上都会启动一个JVM,每一个JVM其实在就是在操作系统中启动了一个进 程。

使用匿名内部类实现多线程

package www;

public class TestThread {
    public static void main(String[] args) {

        //使用Thread
        new Thread(){
            @Override
            public void run() {
                System.out.println(Thread.currentThread().getName());
            }
        }.start();


        //使用Runnable
        new Thread(new Runnable() {
            @Override
            public void run() {
                System.out.println(Thread.currentThread().getName());
            }
        }).start();
    }
}

感谢

黑马程序员

以及勤劳的自己

发布了249 篇原创文章 · 获赞 624 · 访问量 3万+

猜你喜欢

转载自blog.csdn.net/qq_45163122/article/details/105409078