Java 从入门到精通(续集7)——线程和并发
一、线程的创建和启动
Java 中线程有两种创建方式:继承 Thread 类和实现 Runnable 接口。
继承 Thread 类示例代码:
public class MyThread extends Thread {@Overridepublic 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 {@Overridepublic 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 中的网络编程。
本文链接:https://my.lmcjl.com/post/6043.html
展开阅读全文
4 评论