【Java基础】线程笔记——创建线程的3种方式

来源:互联网 发布:看图软件安卓版 编辑:程序博客网 时间:2024/05/17 22:11

这里写图片描述

最直接——继承Thread类

public class ThreadA extends Thread {    @Override    public void run() {        try {            Thread.sleep(500L);        } catch (InterruptedException e) {            e.printStackTrace();        }        System.out.println("This is Thread A From Extending Thread Class");    }}

最常用——实现Runable接口

相比继承Thread类,实现Runable接口有以下优势

  • 避免 Java 的单继承特性而带来的局限;
  • 增强程序的健壮性,代码能够被多个线程共享,代码与数据是独立的;
  • 适合多个相同程序代码的线程区处理同一资源的情况。
public class ThreadB implements Runnable {    @Override    public void run() {        try {            Thread.sleep(1000L);        } catch (InterruptedException e) {            e.printStackTrace();        }        System.out.println("This is Thread B From Implements Runnable ");    }}

返回值——Callable

public class ThreadC implements Callable<String>{    @Override    public String call() {        try {            Thread.sleep(1800L);        } catch (InterruptedException e) {            e.printStackTrace();        }        System.out.println("This is Thread C From Implements Callable");        return "Thread C";    }}

启动

public static void main(String[] args) {        ThreadA a = new ThreadA();        a.start();         ThreadB b = new ThreadB();        new Thread(b).start();        ThreadC c = new ThreadC();        FutureTask<String> task = new FutureTask<>(c);        System.out.println("This is Main Thread -----> Begin");        new Thread(task).start();        try {            System.out.println("result is ------>"+task.get());;        } catch (InterruptedException e) {            e.printStackTrace();        } catch (ExecutionException e) {            e.printStackTrace();        }        System.out.println("This is Main Thread -----> End");}

console

This is Main Thread -----> BeginThis is Thread A From Extending Thread ClassThis is Thread B From Implements Runnable This is Thread C From Implements Callableresult is ------>Thread CThis is Main Thread -----> End

线程指的是程序中的执行线程,在JavaVM种允许程序并发运行多个执行线程

每个线程有个优先级(高优先级执行优先于低优先级线程)

每个线程都可以或不可以标记为一个守护线程(后台运行的线程)

JavaVM启动时,最开始创建一个非守护线程(用来启动某个类指定的main方法),遇到下面情况线程才会停止执行
① 调用Runtime的exit()
② 安全管理器允许退出发生
③ 非守护线程全部停止执行

Thread的构造方法

线程主要方法

currentThread() //获取当前线程yield() //暂停当前线程,执行其他线程sleep() //休眠start() //启动线程run() //如果线程是Runable构造,则调用Runable种run方法,否则,该方法不执行任何操作返回interrupt() //中断线程interrupted() //测试当前线程是否已经中断getPriority() //得到优先级getName() //线程名称getId() //线程唯一标识join() //等待该线程终止setDeamon() //设置守护线程activeCount() //当前线程的线程组活动线程checkAccess()//当前运行的线程是否有权修改该线程dumpStack() //当前线程的堆栈跟踪打印导标准错误流getContextClassLoader() //返回线程上下文getStackTrace() //返回活动线程堆栈跟踪的活动线程getState() //返回该线程状态getThreadGroup() //获取线程组
0 0
原创粉丝点击