JavaEE-什么是多线程?(Thread类的基本用法)

简介: JavaEE-什么是多线程?(Thread类的基本用法)

Thread 类的常见构造方法

class  MyRunnable implements Runnable{
    @Override
    public void run() {
   }
}
        Thread t1=new Thread();                    //创建线程对象
        Thread t2 = new Thread(new MyRunnable());  //使用 Runnable 对象创建线程对象
        Thread t3 =new Thread(new MyRunnable(),"线程3"); //使用 Runnable 对象创建线程对象,并命名
        Thread t4 = new Thread("线程4");           //创建线程对象,并命名

1.启动一个线程

通过重写run方法,创建一个线程对象,但线程创建出来后并没有运行起来,得通过start方法进行线程启动。

class MyThread extends Thread{
    @Override
    public void run() {
        System.out.println("新线程");
    }
}
public class test4 {
    public static void main(String[] args) {
        Thread t=new MyThread();
        t.start();                    //线程开始运行
    }
}

2.中断一个线程

中断线程通常有两种方法:

通过共享的标记来进行中断

public class ThreadDemo2 {
    static class MyRunnable1 implements Runnable{
        public static boolean isQuit=false;
        @Override
        public void run() {
            while (!isQuit){
                System.out.println("新创建的线程");
            }
        }
    }
    public static void main(String[] args) {
        MyRunnable1 target =new MyRunnable1();
Thread t =new Thread(target);
t.start();
        try {
            Thread.sleep(1000);
        } catch (InterruptedException e) {
            throw new RuntimeException(e);
        }
target.isQuit=true;
    }
}

调用 interrupt() 方法来进行中断

interrupt()方法是判断当前线程的中断标志位是否设置,调用后清除标志位。

public class ThreadDemo6 {
    public static class MyRunnable implements Runnable{
        @Override
        public void run() {
            while (!Thread.interrupted()){
                System.out.println("新线程");
            }
        }
    }
    public static void main(String[] args) {
        MyRunnable myRunnable = new MyRunnable();
        Thread t=new Thread(myRunnable);
        t.start();
        try {
            Thread.sleep(3*1000);
        } catch (InterruptedException e) {
            throw new RuntimeException(e);
        }
        t.interrupt();
    }
}

3.等待一个线程

public class ThreadDemo4 {
    public static void main(String[] args) {
        Thread t = new Thread(()->{
            System.out.println("新线程");
        });
        t.start();
        try {
            t.join();
        } catch (InterruptedException e) {
            throw new RuntimeException(e);
        }
    }
}

mian线程等待新创建的t线程执行完后,main线程才能结束。

4.获取当前线程的引用

返回当前线程对象的引用

public class ThreadDemo5 {
    public static void main(String[] args) {
        Thread t =Thread.currentThread();
        System.out.println(t.getName());
    }
}

通过返回mian线程的引用,打印main线程的名称。

5.休眠线程

下面我们通过调用System.currentTimeMillis()方法来查看休眠主线程一定时间后当前时间的变化与休眠时间是否相同

public class ThreadDemo {
public static void main(String[] args) throws InterruptedException {
System.out.println(System.currentTimeMillis());   //以毫秒为单位返回当前时间
Thread.sleep( 1000);
System.out.println(System.currentTimeMillis());   //以毫秒为单位返回当前时间
}
}

所以,这个方法只能保证实际休眠时间是大于等于参数设置的休眠时间的。


相关文章
|
29天前
|
Java
【JavaEE】——多线程常用类
Callable的call方法,FutureTask类,ReentrantLock可重入锁和对比,Semaphore信号量(PV操作)CountDownLatch锁存器,
|
29天前
|
Java 关系型数据库 MySQL
【JavaEE“多线程进阶”】——各种“锁”大总结
乐/悲观锁,轻/重量级锁,自旋锁,挂起等待锁,普通互斥锁,读写锁,公不公平锁,可不可重入锁,synchronized加锁三阶段过程,锁消除,锁粗化
|
29天前
|
Java Go 调度
【JavaEE】——线程池大总结
线程数量问题解决方式,代码实现线程池,ThreadPoolExecutor(核心构造方法),参数的解释(面试:拒绝策略),Executors,工厂模式,工厂类
|
29天前
|
缓存 安全 Java
【JavaEE】——单例模式引起的多线程安全问题:“饿汉/懒汉”模式,及解决思路和方法(面试高频)
单例模式下,“饿汉模式”,“懒汉模式”,单例模式下引起的线程安全问题,解锁思路和解决方法
|
29天前
|
Java 调度
|
29天前
|
Java 调度
【JavaEE】——线程的安全问题和解决方式
【JavaEE】——线程的安全问题和解决方式。为什么多线程运行会有安全问题,解决线程安全问题的思路,synchronized关键字的运用,加锁机制,“锁竞争”,几个变式
|
29天前
|
Java API 调度
【JavaEE】——多线程(join阻塞,计算,引用,状态)
【JavaEE】——多线程,join,sleep引起的线程阻塞,多线程提升计算效率,如何获取线程的引用和状态
|
29天前
|
Java 程序员 调度
【JavaEE】线程创建和终止,Thread类方法,变量捕获(7000字长文)
创建线程的五种方式,Thread常见方法(守护进程.setDaemon() ,isAlive),start和run方法的区别,如何提前终止一个线程,标志位,isinterrupted,变量捕获
|
1月前
|
NoSQL Redis
单线程传奇Redis,为何引入多线程?
Redis 4.0 引入多线程支持,主要用于后台对象删除、处理阻塞命令和网络 I/O 等操作,以提高并发性和性能。尽管如此,Redis 仍保留单线程执行模型处理客户端请求,确保高效性和简单性。多线程仅用于优化后台任务,如异步删除过期对象和分担读写操作,从而提升整体性能。
69 1
|
3月前
|
存储 消息中间件 资源调度
C++ 多线程之初识多线程
这篇文章介绍了C++多线程的基本概念,包括进程和线程的定义、并发的实现方式,以及如何在C++中创建和管理线程,包括使用`std::thread`库、线程的join和detach方法,并通过示例代码展示了如何创建和使用多线程。
72 1