Java进阶教程:多线程、反射、JVM优化等高级技巧
以下是进阶Java编程的教程,涵盖了多线程编程、网络编程、JDBC数据库连接、Java反射、设计模式等高级Java技术。这些技能有助于开发高效、灵活和可维护的Java应用。
Java教程之:进阶Java编程
1. 多线程
- 创建线程的两种方式(继承Thread类和实现Runnable接口)
Java中可以通过继承Thread类或实现Runnable接口来创建线程。 - 继承
Thread类:java class MyThread extends Thread { public void run() { System.out.println("Thread running..."); } } MyThread t = new MyThread(); t.start(); - 实现
Runnable接口:class MyRunnable implements Runnable { public void run() { System.out.println("Runnable running..."); } } Thread t = new Thread(new MyRunnable()); t.start(); - 同步与锁(synchronized关键字)
在多线程环境中,synchronized关键字用于确保同一时刻只有一个线程访问共享资源。
class Counter {
private int count = 0;
public synchronized void increment() {
count++;
}
}
- 线程间通信(wait, notify, notifyAll)
wait()、notify()和notifyAll()方法用于实现线程间的通信,通常与同步块一起使用。
synchronized (obj) {
obj.wait(); // 使当前线程等待
obj.notify(); // 唤醒一个等待线程
obj.notifyAll(); // 唤醒所有等待线程
}
- Executor框架
Executor框架提供了一种更高级别的线程管理机制,可以轻松管理线程池和任务调度。
ExecutorService executor = Executors.newFixedThreadPool(10);
executor.submit(() -> System.out.println("Task running..."));
executor.shutdown();
2. 网络编程
- Socket编程
Java提供了Socket类进行客户端与服务器之间的通信。客户端通过Socket连接服务器,服务器通过ServerSocket等待客户端连接。 - 客户端代码:
java Socket socket = new Socket("localhost", 8080); OutputStream os = socket.getOutputStream(); os.write("Hello, Server!".getBytes()); socket.close(); - 服务器端代码:
ServerSocket serverSocket = new ServerSocket(8080); Socket socket = serverSocket.accept(); InputStream is = socket.getInputStream(); byte[] buffer = new byte[1024]; int bytesRead = is.read(buffer); System.out.println(new String(buffer, 0, bytesRead)); socket.close(); - 客户端与服务器端的通信
客户端和服务器端通过流(InputStream和OutputStream)进行数据传输。服务器端通常在一个while循环中接受多个客户端的连接请求。
3. JDBC数据库连接
- JDBC基础(DriverManager、Connection、Statement)
JDBC(Java Database Connectivity)是Java提供的一种用于连接数据库的API。常用类包括: DriverManager:管理数据库驱动程序。Connection:建立与数据库的连接。Statement:执行SQL查询或更新。
Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/mydb", "user", "password");
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery("SELECT * FROM users");
- PreparedStatement与批量操作
PreparedStatement用于执行预编译的SQL语句,提供更好的性能和安全性。也可用于批量操作。
String query = "INSERT INTO users (name, age) VALUES (?, ?)";
PreparedStatement pstmt = conn.prepareStatement(query);
pstmt.setString(1, "John");
pstmt.setInt(2, 30);
pstmt.executeUpdate();
- 事务管理
JDBC支持事务管理,确保多个SQL操作要么全部成功,要么全部回滚。
conn.setAutoCommit(false);
try {
Statement stmt = conn.createStatement();
stmt.executeUpdate("UPDATE users SET age = 30 WHERE name = 'John'");
stmt.executeUpdate("UPDATE users SET age = 25 WHERE name = 'Jane'");
conn.commit(); // 提交事务
} catch (SQLException e) {
conn.rollback(); // 回滚事务
}
4. Java反射
- 获取类的信息
Java反射允许动态地获取类的信息(如类名、方法、字段等)。
Class<?> clazz = Class.forName("com.example.MyClass");
Method[] methods = clazz.getMethods();
for (Method method : methods) {
System.out.println(method.getName());
}
- 动态加载类
反射也可以用于动态加载类并创建对象实例。
Class<?> clazz = Class.forName("com.example.MyClass");
Object obj = clazz.getDeclaredConstructor().newInstance();
- 反射与注解
Java注解与反射结合使用,可以提供更多的元数据并在运行时对类进行处理。
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface MyAnnotation {
String value();
}
@MyAnnotation(value = "example")
public void myMethod() {}
5. 设计模式
设计模式是软件开发中的通用解决方案,用于解决常见问题。以下是几种常用的设计模式:
- 单例模式
单例模式确保一个类只有一个实例,并提供一个全局访问点。
public class Singleton {
private static Singleton instance;
private Singleton() {}
public static Singleton getInstance() {
if (instance == null) {
instance = new Singleton();
}
return instance;
}
}
- 工厂模式
工厂模式提供了一个创建对象的接口,但由子类决定实例化哪一个类。
public interface Animal {
void sound();
}
public class Dog implements Animal {
public void sound() {
System.out.println("Bark");
}
}
public class AnimalFactory {
public Animal createAnimal(String type) {
if (type.equals("Dog")) {
return new Dog();
}
return null;
}
}
- 观察者模式
观察者模式定义了对象间的一对多依赖关系,一个对象状态发生变化时,所有依赖它的对象都会自动更新。
public class Subject {
private List<Observer> observers = new ArrayList<>();
public void addObserver(Observer observer) {
observers.add(observer);
}
public void notifyObservers() {
for (Observer observer : observers) {
observer.update();
}
}
}
public interface Observer {
void update();
}
- 代理模式
代理模式为其他对象提供一种代理以控制对该对象的访问。常见的代理模式包括虚拟代理、保护代理等。
public interface RealSubject {
void request();
}
public class RealSubjectImpl implements RealSubject {
public void request() {
System.out.println("Requesting...");
}
}
public class Proxy implements RealSubject {
private RealSubjectImpl realSubject;
public void request() {
if (realSubject == null) {
realSubject = new RealSubjectImpl();
}
realSubject.request();
}
}
总结
本部分介绍了Java中的进阶编程技术,包括多线程编程、网络编程、JDBC数据库连接、Java反射、设计模式等。通过掌握这些技术,开发者能够构建高效、灵活的Java应用,并能够应对复杂的开发任务。