Java 小白多线程
程序员文章站
2022-05-02 10:25:48
...
通常比较常用的方式有两种
一、继承Thread类
public class KeyPersonThread extends Thread {
public void run() {
System.out.println(Thread.currentThread().getName() + "开始了战斗!");
for (int i = 0; i < 10; i++) {
System.out.println(Thread.currentThread().getName() + "左突右杀,攻击随军!");
}
System.out.println(Thread.currentThread().getName() + "结束了战斗!");
}
}
// 初始化
Thread mrCheng = new KeyPersonThread();
mrCheng.setName("程咬金");
mrCheng.start();
二、实现Runnable接口
public class ArmyRunnable implements Runnable {
// volatile 保证了线程可以正确读取其他线程写入的值
// 可见性
volatile boolean keepRunning = true;
public void run() {
while (keepRunning) {
for (int i = 0; i < 5; i++) {
System.out.println(Thread.currentThread().getName() + "进攻对方["+i+"]");
Thread.yield();
}
}
System.out.println(Thread.currentThread().getName() + "结束战斗!");
}
}
// 初始化
ArmyRunnable armyRunnableTask1 = new ArmyRunnable();
Thread thread1 = new Thread(armyRunnableTask1, "随军");
thread1.start();
主要的方法
-
yield()
调用此方法的线程,释放当前CPU的执行权 -
join()
在A线程中调用B线程的join()方法 表示 : 当执行到此方法,A线程停止执行 直至B线程执行完毕.A线程再接着join()之后的代码执行 -
currentThread()
静态的调取当前的线程 -
setName()
设置此线程的名字 -
getName()
获取当前线程名 -
sleep()
休眠
三、线程间通信 同步
private final Object lock = new Object();
synchronized (lock) {
// 某种约束条件 导致线程等待
try {
lock.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
// 等待完毕 执行代码成功 通知其他线程 继续获取资源执行
lock.notifyAll();
}
通过wait notify notifyAll 进行线程的加锁阻塞,同步处理敏感数据操作。
还有一种方式将操作共享数据的方法声明为synchronized。即此方法为同步方法,能够保证当其中一个线程执行此方法时,其它线程在外等待直至此线程执行完此方法。
四、线程的停止
- 推荐:使用标记位进行处理
- interupt 停止,需要根据api, isInterupted 进行判断和第1步中类似
上一篇: 新婚姻法婚前买房关规定
下一篇: python - RSA加密