java多线程

java 多线程

线程的状态

新建(New):当一个线程对象被创建但还没有启动时,它的状态就是新建状态。
运行(Runnable):当线程被启动后,它进入运行状态,开始执行任务。
阻塞(Blocked):当线程在等待某个资源或者锁的时候,它会进入阻塞状态。
等待(Waiting):当线程在等待其他线程的特定操作完成时,它会进入等待状态。
终止(Terminated):当线程的任务执行完毕或者发生异常时,它会进入终止状态。

实现线程的方式

传统实现线程的方式有 继承 Thread 类、实现 Runnable 接口和实现 Callable 接口三种方式。

继承 Thread 类
//继承Thread类,重写run()方法,调用start()方法启动
public class TestThread1 extends Thread{
    @Override
    public void run() {
        //run方法线程体
        for (int i = 0; i < 1000; i++) {
            System.out.print("服了服了"+i + " ");
        }
    }
    public static void main(String[] args) {
        //创建线程
        TestThread1 t1 = new TestThread1(); 
        //调用start()方法开启
        t1.start(); 
        //这个是main线程输出的
        for (int i = 0; i < 1000; i++) {
            System.out.print("疯了疯了"+i + " ");
        }
    }
}

实现 Runnable 接口
//实现Runnable接口,重写run()方法,执行线程需要丢入Runnable接口实现类,调用start方法
public class TestThread2 implements Runnable{
    @Override
    public void run() { 
        for (int i = 0; i < 1000; i++) {
            System.out.print("服了服了+"+i + " ");
        }
    }
    public static void main(String[] args) {
        TestThread2 testThread2 = new TestThread2(); 
        new Thread(testThread2).start();
        for (int i = 0; i < 1000; i++) {
            System.out.print("疯了疯了+"+i +" ");
        }
    }
}
实现 Callable 接口
//实现Callable接口
public class TestCallable implements Callable<Boolean> {
    //重写call()方法
    @Override
    public Boolean call() throws Exception {
        System.out.println("call方法");
        return true;
    } 
    public static void main(String[] args) throws Exception {
    	//创建对象
        TestCallable tc = new TestCallable(); 
        //创建执行服务
        ExecutorService ser = Executors.newFixedThreadPool(1); 
        //提交执行
        Future<Boolean> result = ser.submit(tc);//通过服务提交线程 
        //获取结果
        boolean b = result.get(); //call()方法返回类型 
        //关闭服务
        ser.shutdown();
    }
}

线程常用的方法

  1. start():启动线程,使其进入就绪状态,并开始执行线程的run()方法。
  2. run():线程的主体方法,包含线程要执行的任务逻辑。
  3. sleep():让线程暂时休眠一段时间,单位是毫秒。这个方法可以用来模拟一些延时操作。
  4. join():让一个线程等待另一个线程执行完毕。可以用来控制线程的执行顺序。
  5. interrupt():中断线程的执行。会给线程发送一个中断信号,但线程是否真正中断还需要线程自己来判断。
  6. yield():暂停当前线程的执行,让出CPU的使用权给其他线程。但是是否成功让出由系统决定。
  7. isAlive():判断线程是否还存活,即线程是否还在执行中。
  8. getName()和setName():获取和设置线程的名字。
  9. setPriority():设置线程的优先级,范围从1到10,数字越大优先级越高。
  10. currentThread():获取当前执行的线程对象。

这些方法可以帮助你更好地控制线程的执行和管理,但要记得合理使用,以避免产生不必要的问题哦!

你可能感兴趣的:(java,java)