目录
多线程的第二种实现方式 实现Runnable接口的方式进行实现
void setName(String name) 设置线程的名字(构造方法也可以设置名字)
static Thread currentThread() 获取当前线程的对象
static void sleep(long time) 让线程休眠指定的时间,单位为毫秒
setPriority(int newPriority) 设置线程的优先级
final int getPriority() 获取线程的优先级
final void setDaemon(boolean on) 设置为守护线程
public static void yield() 出让线程/礼让线程
public static void join() 插入线程/插队线程
javajava
Java多线程
Java多线程是指在Java语言中使用多个线程实现并发执行的编程技术。Java多线程可以提高程序的并发处理能力,使程序能够同时执行多个任务。
Java多线程可以通过创建Thread类的实例或者实现Runnable接口来实现。创建线程的方式有两种:继承Thread类和实现Runnable接口。
继承Thread类的方式创建线程,需要重写Thread类的run()方法,并在run()方法中实现线程的具体逻辑。然后创建Thread类的实例,并调用start()方法来启动线程。
实现Runnable接口的方式创建线程,需要实现Runnable接口的run()方法,并在run()方法中实现线程的具体逻辑。然后创建Thread类的实例,并将实现了Runnable接口的对象作为参数传递给Thread类的构造方法,最后调用start()方法来启动线程。
Java多线程还可以通过使用线程池来管理线程,线程池可以重复利用已创建的线程,避免频繁创建和销毁线程的开销。
在Java多线程编程中,需要注意线程的同步和互斥。可以使用synchronized关键字或者Lock接口来实现线程的同步,防止多个线程同时访问共享数据导致的数据不一致或者出错的问题。
Java多线程还提供了一些线程间通信的机制,如使用wait()和notify()方法实现线程的等待和唤醒,使用join()方法等待线程执行完成等。
总之,Java多线程可以实现并发执行的编程,提高程序的处理能力,但同时也需要注意线程的同步和互斥以及线程间的通信。
多线程的实现方式
多线程的第一种实现方式 继承Thread类的方式进行实现
自己定义一个类经承Thresd,重写run方法,创建子类的对象,并启动线程
MyThread类
package threadcase1;
public class MyThread extends Thread{
@Override
public void run() {
for (int i = 0; i < 100; i++) {
System.out.println(getName()+"hello world");
}
}
}
测试类
package threadcase1;
public class ThreadDemo {
public static void main(String[] args) {
MyThread t1 = new MyThread();
MyThread t2 = new MyThread();
t1.setName("线程1");
t2.setName("线程2");
t1.start();
t2.start();
}
}
可以看到两个线程交替进行
多线程的第二种实现方式 实现Runnable接口的方式进行实现
先写MyRun类
package threadcase2;
public class MyRun implements Runnable{
@Override
public void run() {
for (int i = 0; i < 50; i++) {
//获取当前线程对象
Thread t = Thread.currentThread();
System.out.println(t.getName()+"hello world");
}
}
}
测试类
package threadcase2;
public class ThreadDemo {
public static void main(String[] args) {
//创建MyRun对象
MyRun mr = new MyRun();
//创建线程对象
Thread t1 = new Thread(mr);
Thread t2 = new Thread(mr);
//给线程设置名字
t1.setName("线程1");
t2.setName("线程2");
//开启线程
t1.start();
t2.start();
}
}
利用Callable接口和Future接口方式实现
创建一个类MyCallable实现callable接口重写call(是有返回值的,表示多线程运行的结果)
创建MyCallable的对象(表示多线程要执行的任务)
创建FutureTask的对象(作用管理多线程运行的结果)
创建Thread类的对象,并启动(表示线程)
MyCallable类
package threadcase3;
import java.util.concurrent.Callable;
public class MyCallable implements Callable<Integer> {
@Override
public Integer call() throws Exception {
int sum=0;
for (int i = 0; i <= 100; i++) {
sum=sum+i;
}
return sum;
}
}
测试类
package threadcase3;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.FutureTask;
public class ThreadDemo {
public static void main(String[] args) throws ExecutionException, InterruptedException {
//创建MyCallable的对象(表示多线程要执行的任务)
MyCallable mc = new MyCallable();
//创建FutureTask的对象(作用管理多线程运行的结果)
FutureTask ft = new FutureTask<>(mc);
//创建Thread类的对象,并启动(表示线程)
Thread t1 = new Thread(ft);
//启动线程
t1.start();
//获取多线程运行的结果
Object result = ft.get();
System.out.println(result);
}
}
继承Thread类 优点:编程比较简单,可以直接使用Thread类中的方法
缺点:可以扩展性较差,不能再继承其他的类
实现Runnable接口 优点: 扩展性强实现该接口的同时还可以继承其他的类
缺点:编程相对复杂,不能直接使用Thread类中的方法
实现Callable接口 优点: 扩展性强实现该接口的同时还可以继承其他的类
缺点:编程相对复杂,不能直接使用Thread类中的方法
想要获取多线程运行的结果就用Callable接口的方法
多线程中常用的成员方法
String getName() 返回此线程的名称
void setName(String name) 设置线程的名字(构造方法也可以设置名字)
static Thread currentThread() 获取当前线程的对象static void sleep(long time) 让线程休眠指定的时间,单位为毫秒
setPriority(int newPriority) 设置线程的优先级
final int getPriority() 获取线程的优先级
final void setDaemon(boolean on) 设置为守护线程
public static void yield() 出让线程/礼让线程
public static void join() 插入线程/插队线程
String getName() 返回此线程的名称
如果我们没有给线程设置名字,线程也是有默认的名字的格式:Thread-x(X序号,从0开始的)
void setName(String name) 设置线程的名字(构造方法也可以设置名字)
如果我们要给线程设置名字,可以用set方法进行设置,也可以构造方法设置
static Thread currentThread() 获取当前线程的对象
package Threadmethod;
public class ThreadDemo {
public static void main(String[] args) {
Thread t = Thread.currentThread();
String name = t.getName();
System.out.println(name);
}
}
当JVM虚拟机启动之后,会自动的启动多条线程其中有一条线程就叫做main线程他的作用就是去调用main方法,并执行里面的代码
static void sleep(long time) 让线程休眠指定的时间,单位为毫秒
package Threadmethod;
public class ThreadDemo {
public static void main(String[] args) throws InterruptedException {
System.out.println("111111");
Thread.sleep(3000);
System.out.println("222222");
}
}
哪条线程执行到这个方法,那么哪条线程就会在这里停留对应的时间
方法的参数:就表示睡眠的时间,单位毫秒
当时间到了之后,线程会自动的醒来,继续执行下面的其他代码
setPriority(int newPriority) 设置线程的优先级
坦克的优先级比飞机的高,但是飞机比坦克先执行完成,优先级不是绝对的,是概率问题
final int getPriority() 获取线程的优先级
final void setDaemon(boolean on) 设置为守护线程
当其他的非守护线程执行完毕之后,守护线程会陆续结束
public static void yield() 出让线程/礼让线程
会让结果尽可能的均匀一些,但不是绝对的
public static void join() 插入线程/插队线程
下面的就是插入线程
标签:java,Thread,void,线程,static,多线程,public From: https://blog.csdn.net/m0_46702681/article/details/139631290