Java 从入门到精通(续集7)——线程和并发

Java 从入门到精通(续集7)——线程和并发

在 Java 中,线程是一种独立的执行路径,可以同时执行多个线程来提高程序运行效率。Java 也提供了丰富的线程操作 API,并引入了并发包,使得多线程编程变得更加容易和安全。

一、线程的创建和启动

Java 中线程有两种创建方式:继承 Thread 类和实现 Runnable 接口。

继承 Thread 类示例代码:

public class MyThread extends Thread {
    @Override
    public void run() {
        System.out.println("thread is running");
    }
}

public class Demo {
    public static void main(String[] args) {
        MyThread t1 = new MyThread();
        t1.start(); // 启动线程
    }
}

实现 Runnable 接口示例代码:

public class MyRunnable implements Runnable {
    @Override
    public void run() {
        System.out.println("runnable is running");
    }
}

public class Demo {
    public static void main(String[] args) {
        MyRunnable r1 = new MyRunnable();
        Thread t2 = new Thread(r1);
        t2.start(); // 启动线程
    }
}

二、线程同步和互斥

在多线程环境下,当多个线程访问同一个共享资源时,可能会出现并发问题,如数据紊乱、死锁等。Java 提供了 synchronized 关键字和 Lock 对象来解决这些问题。

synchronized 关键字示例代码:

public class Counter {
    private int count = 0;

    public synchronized void add(int n) {
        count += n;
    }

    public synchronized int get() {
        return count;
    }
}

Lock 对象示例代码:

public class Counter {
    private int count = 0;
    private Lock lock = new ReentrantLock();

    public void add(int n) {
        lock.lock();
        try {
            count += n;
        } finally {
            lock.unlock(); // 必须释放锁
        }
    }

    public int get() {
        lock.lock();
        try {
            return count;
        } finally {
            lock.unlock(); // 必须释放锁
        }
    }
}

三、线程池

Java 中的线程池可以管理多个线程,并且可以重用已经创建的线程,避免频繁的创建和销毁线程,从而提高程序的性能。

创建线程池示例代码:

ExecutorService pool = Executors.newFixedThreadPool(3);
for (int i = 0; i < 5; i++) {
    pool.execute(new MyRunnable());
}
pool.shutdown(); // 关闭线程池

以上就是 Java 中的线程和并发,使用多线程可以使程序更加高效、快速,但也需要注意线程安全和同步问题。在实际开发中,要根据需求选择合适的线程操作方式,并合理利用线程池。下一篇续集将为您介绍 Java 中的网络编程。

你可能感兴趣的:(Java,java,jvm,开发语言)