线程在JAVA的使用
更新: 1/11/2025 字数: 0 字 时长: 0 分钟
Thread的创建形式
1.实现 Runnable 接口或使用lambda表达式
java
public class RunnableTest implements Runnable{
@Override
public void run() {
System.out.println(1);
}
}
java
public static void main(String[] args) {
Thread t1=new Thread(new RunnableTest());
Thread t2=new Thread(()->{
System.out.println("124");
});
t1.start();
t2.start();
}
2.实现 Callable 接口并用 FutureTask 进行封装。
java
public class CallableTest implements Callable {
@Override
public Object call() throws Exception {
return 1;
}
}
java
public static void main(String[] args) throws ExecutionException, InterruptedException {
FutureTask futureTask=new FutureTask(new CallableTest());
Thread t1=new Thread(futureTask);
t1.start();
System.out.println(futureTask.get()); //获取返回值
}
3.继承Thread类并直接创建
java
public class ThreadTest extends Thread{
@Override
public void run() {
System.out.println(123);
}
}
java
public class Main {
public static void main(String[] args) throws ExecutionException, InterruptedException {
ThreadTest threadTest=new ThreadTest();
threadTest.start(); //会直接调用内部的run方法
}
}
线程的常用方法
- Thread.sleep()方法会休眠当前正在执行的线程
- Thread.yield()方法会建议当前线程可以被切换走了,换下一线程执行。但该方法只是建议,并非一定会切换走
- thread.interrupted() 该成员方法会中止某一线程,使该线程提前结束
- thread.join() 在一个线程中使用另一个线程的join方法,会先执行另一个线程,当前线程则会挂起,等另一线程执行完后再接着向下自行,
- Object.wait() 会让执行到该对象的该方法的线程挂起,并释放该线程占用的锁。只有当另一线程执行到了该对象的notify()方法或notifyAll()方法才会被唤醒。
notify()方法只会随机唤醒一个挂起的线程,而notifyAll()会唤醒所有等待中的线程。
sleep()相对wait()在于sleep不会释放锁