java多线程(一)基础内容

一.线程创建方式

1.方式一

编写类继承Thread,子类应该重写run方法,然后调用子类实例的start方法(非阻塞)启动线程,执行run方法里面的东西

package com.miracle.concurrency.chapter1;


public class TryConcurrency {

    public static void main(String[] args) {
        new Thread("READ-Thread"){
            @Override
            public void run() {
                readFromDataBase();
            }
        }.start();

        new Thread("WRITE-Thread"){
            @Override
            public void run() {
                writeDataToFile();
            }
        }.start();
    }

    private static void readFromDataBase(){
        // read data from database and handle it.
        try {
            println("Begin read data from db.");
            Thread.sleep(1000 * 10L);
            println("Read data done and start handle it.");
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        println("The data handle finish and successfully.");
    }

    private static void writeDataToFile(){
        // read data from database and handle it.
        try {
            println("Begin write data to file.");
            Thread.sleep(2000 * 10L);
            println("Write data done and start handle it.");
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        println("The data handle finish and successfully.");
    }

    private static void println(String message) {
        System.out.println(message);
    }
}

2.方式二

  • 定义类实现Runnable接口
class PrimeRun implements Runnable {
	long minPrime;
	PrimeRun(long minPrime){
		this.minPrime = minPrime;
	}
	public void run(){
		// compute primes lager than minPrime
		...
	}
}
  • 开启线程
PrimeRun p = new PrimeRun(143);
new Thread(p).start();

二.线程的生命周期

1.new状态

在代码中 new Thread() 时

2.runnable状态

调用start()时,线程不会立即执行,但此刻具备执行能力

3.running状态

当runnable状态的线程得到cpu调度,变成running状态,开始执行

4.blocked状态

线程执行过程中被block住(如代码调用了sleep,争抢锁等)

5.terminated状态

线程被终结

在这里插入图片描述

三.Thread API

1.构造方法

  • Thread();
    创建线程对象Thread(空参构造),默认有一个线程名,以Threa-开头,从0开始计数

  • Thread(String name)
    指定线程名的构造方法

  • Thread(Runnable target, String name)
    指定运行目标target,和线程名字

  • Thread(ThreadGroup group, Runnable target, String name)
    如果构造线程对象时为传入ThreadGroup,Thread会默认获取父线程的ThreadGroup,作为线程的ThreadGroup,此时子线程和父线程将会在同一个ThreadGroup中

  • Thread(ThreadGroup group, Runnable target, String name, long stackSize)
    stackSize:线程拥有的栈空间大小

2.方法

  • static int activeCount()
    返回当前线程组的活跃线程的数量

  • static Thread currentThread()
    返回当前执行线程的引用

  • static int enumerate(Thread[] tarray)
    把当前线程组内的活跃线程 复制到 参数tarray中

  • long getId()
    返回线程的id

  • String getName()
    返回线程的名字

  • void setDaemon(boolean on)
    设置线程为守护线程

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值