Java学习笔记69. 运行线程 RUN THREADS

前面总结了,线程是一种容器,运行代码的容器。这些容器都在更大的容器进程(Process)里。

默认的启动的线程是main方法所在的线程,如果要使用多线程,就要启动它。

有两种方法可以启动多线程:1. 通过创建线程对象,然后使用线程对象的start方法来启动线程

2. 通过创建实现了Runnable接口的对象,再把此对象作为参数,传递给Thread类的构造方法,构造出Thread的一个实例,再使用这个实例的start方法启动线程

总之,就是要有thread实例,就是要通过start方法

通过继承Thread类的实例创建和启动多线程的语法如下:

class A extends Thread{
    public void run(){
        some codes here;
    }
}
new A().start();

下面是通过实现Runnable接口实现多线程的语法:

class A implements Runnable{
    public void run(){
    }
}
A a = new A();
Thread t = new Thread(a);
t.start();
要注意的是,在实现多线程时,程序的结果是多样化的。就如前面总结的。不确定哪个线程先执行,哪个后执行,不确定哪个线程中间插进来执行。这是在CPU的层次调度的事情。等我深入学习之后,再作总结。







### 关于Java多线程的拓展学习资料 #### 一、线程安全与同步机制 在Java中,为了确保多个线程能够安全地访问共享资源而不发生数据竞争,通常会采用多种方式来实现线程间的同步控制。上述提到的`VolatileAtomicThread`类展示了通过`synchronized`关键字锁定对象实例的方式来进行同步处理[^1]。 ```java public class VolatileAtomicThread implements Runnable { private int count = 0; private final Object lockObj = new Object(); @Override public void run() { for (int i = 0; i < 100; ++i) { synchronized (lockObj){ count++; System.out.println("count =======>> " + count); } } } } ``` 除了使用`synchronized`外,还可以利用更高效的原子操作(如`AtomicInteger`),以及显式的锁机制(如`ReentrantLock`)。这些方法可以减少不必要的阻塞开销并提高序性能。 #### 二、并发工具包中的高级特性 Java提供了丰富的并发工具库——`java.util.concurrent`,其中包含了诸如`CountDownLatch`, `CyclicBarrier`, `Semaphore`等实用组件。它们可以帮助开发者更加灵活地管理复杂的多线程场景下的协作逻辑。 例如,在某些情况下可能需要等待一组线程完成特定的任务之后再继续执行后续的操作;此时就可以考虑应用`CountDownLatch`: ```java import java.util.concurrent.CountDownLatch; class Worker extends Thread{ private CountDownLatch latch; public Worker(CountDownLatch latch){ this.latch=latch; } @Override public void run(){ try { // 执行任务... Thread.sleep((long)(Math.random()*10)); // 表示当前工作已完成 latch.countDown(); } catch (InterruptedException e){} } } // 主线程创建计数器,并启动子线程们 final int N=5; CountDownLatch cdl=new CountDownLatch(N); for(int i=0;i<N;++i) new Worker(cdl).start(); try { // 等待所有子线程结束 cdl.await(); } catch (InterruptedException ignored){} System.out.println("All threads have finished."); ``` #### 三、异步通信模式的应用实践 当涉及到不同模块之间的解耦合设计时,“发布/订阅”模型是一种非常有效的解决方案之一。这里提到了一个简单的观察者接口定义[^2],它允许主体通知其注册过的监听者有关状态变化的信息。 ```java public interface Observer { void update(String message); } ``` 基于此基础之上构建完整的事件驱动架构,则可以使系统的各个部分保持松散联系的同时又能高效互动。 #### 四、数据库连接池配置优化建议 对于频繁读写的Web应用序而言,合理设置JDBC连接参数至关重要。下面给出了一组典型的MySQL数据库URL及其用户名密码组合[^3]: ```properties jdbc.url=jdbc:mysql://localhost:3306/day06?useSSL=false&serverTimezone=UTC jdbc.user=root jdbc.password=root ``` 需要注意的是实际项目部署过中应当遵循最小权限原则分配账户角色,并且尽可能启用加密传输选项以保障安全性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值