美文网首页
Java并发编程和源码分析-笔记-01

Java并发编程和源码分析-笔记-01

作者: robertzhai | 来源:发表于2022-08-06 21:53 被阅读0次
image.png

创建线程的方式

1:实现Runnable
2:继承Thread
3:匿名内部类
4:callable,带返回值

设置project的 jdk

javac -version

javac 15.0.1

java -version

openjdk version "15.0.1" 2020-10-20

echo $JAVA_HOME

/Library/Java/JavaVirtualMachines/openjdk.jdk/Contents/Home


image.png
image.png

demo


package thread_test;


import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.FutureTask;

class A implements Runnable {

    @Override
    public void run() {
        System.out.println("in A run " +  Thread.currentThread().getName());

    }
}


class B extends Thread{

    public void run() {
        System.out.println("in B run " +  Thread.currentThread().getName());
    }
}
class D implements Callable<String> {

    @Override
    public String call() throws Exception {
        System.out.println("in Callable run " +  Thread.currentThread().getName());
        return "call Callable result";
    }
}
public class t_runnable {

    public static void main(String[] args) throws InterruptedException, ExecutionException {
        A a = new A();
        Thread t1 = new Thread(a);
        t1.start();

        Thread t2 = new B();
        t2.start();
        System.out.println("in Main run " +  Thread.currentThread().getName());

        new Thread(){
            @Override
            public void run() {
                System.out.println("in Main run " +  Thread.currentThread().getName());
            }
        }.start();

        new Thread(new Runnable() {
            @Override
            public void run() {
                System.out.println("in Main run " +  Thread.currentThread().getName());
            }
        }).start();
        new Thread(()->{
            System.out.println("in Main run " +  Thread.currentThread().getName());

        }).start();
        FutureTask<String> ft = new FutureTask<>(new D());
        Thread t3 = new Thread(ft);
        t3.start();
        t1.join();
        t2.join();
        t3.join();

        String result = ft.get();
        System.out.println("result:" + result);

    }
}


output



in B run Thread-1
in A run Thread-0
in Main run main
in Main run Thread-2
in Main run Thread-3
in Main run Thread-4
in Callable run Thread-5
result:call Callable result

main函数运行后会启动一个主线程main thread , 其它线程是用户自定义线程,可以并发运行,cpu的抢占式调度导致

线程的6种状态切换

image.png

ref

https://www.bilibili.com/video/BV1Hb4y1J7CB/?spm_id_from=pageDriver&vd_source=82e03147a3c338ea1383309670651595
https://blog.csdn.net/weixin_45246161/article/details/125066776

相关文章

网友评论

      本文标题:Java并发编程和源码分析-笔记-01

      本文链接:https://www.haomeiwen.com/subject/hapvwrtx.html