java 多线程

一个线程的生命周期:

新建状态-----start()----->就绪状态-----run()----->运行状态-----执行结束\stop----->死亡状态
                                |                                                      |
                                <------------阻塞状态<------------  
      等待阻塞(wait)、同步阻塞(synchronized)、其他阻塞(sleep或join或I/O请求)

    1、若线程未执行结束,则isAlive()返回true.
    2、调用一个线程的interrupt()来请求中断该线程,若线程被请求中断,则interrupted()方法返回true.
    3、在当前线程中调用sleep()方法,可以等待一定时间.
    4、在当前线程中调用另一个线程的join()方法,会将当前线程与该线程合并,若该线程未结束,则当前线程进入阻塞态直到该线程执行结束.

线程的优先级:

    Java线程的优先级是一个整数,其取值范围是1到10(默认值为5),通过setPriority()设置优先级.
    Thread.MIN_PRIORITY 为 1
    Thread.NORM_PRIORITY为 5
    Thread.MAX_PRIORITY 为 10

用户线程和守护线程:

    jvm启动后通常有一个用户线程(从main方法启动).我们可以通过setDaemon(true)将线程设置为守护线程.
    在创建子线程时,子线程会继承当前线程的状态.
    JVM遇到如下情况时会终止运行: 1、exit函数被调用. 2、所有的用户线程都结束了(只存在守护线程)

创建线程的三种方法: 实现Runnable接口、继承Thread、Callable和Future创建异步线程

1、通过实现Runnable接口

	class MyRunnable implements Runnable{
		@Override
		public void run() {
			System.out.println("Runnable打印");
		}
	}
	public static void main(String[] args)
	{
		MyRunnable myRunnable = new MyRunnable();
		Thread th1 = new Thread(myRunnable);
		Thread th2 = new Thread(myRunnable);
		th1.start();
		th2.start();
	}

2、通过继承Thread类

    class MyThread extends Thread{
        @Override
        public void run() {
            System.out.println("MyThread线程打印");
        }
    }
    public static void main(String[] args)
    {
        MyThread th = new MyThread();
        th.start();
    }

3、通过Callable和Future创建异步线程

    class MyCallable implements Callable<String>{//这里通过范式来确定返回值类型
        @Override
        public String call() throws Exception {
            String valueString = "MyCallable返回值";
            Thread.sleep(1000);
            return valueString;
        }
    }
    public static void main(String[] args)
    {
        //创建可调用对象
        MyCallable myCallable = new MyCallable();
        //创建异步任务,注意返回值类型要和调用对象的返回值类型一致
        FutureTask<String> futureTask = new FutureTask<>(myCallable);
        //创建一个线程去执行这个异步任务
        new Thread(futureTask).start();
        try {
            //调用get获取线程返回值,若线程未执行完则等待线程执行
            System.out.println("子线程的返回值:"+futureTask.get());
        } catch (InterruptedException e) {
            e.printStackTrace();  
        } catch (ExecutionException e) {  
            e.printStackTrace();  
        }
    }

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值