
在Java 8及以后,我们可以使用Lambda表达式更简洁地创建线程:
// 使用Lambda表达式实现Runnable接口
Thread thread4 = new Thread(() -> {
System.out.println("线程 " + Thread.currentThread().getName() + " 正在运行");
});
thread4.start();
// 使用ExecutorService线程池创建线程
ExecutorService executor = Executors.newSingleThreadExecutor();
executor.submit(() -> {
System.out.println("线程池中的线程正在执行任务");
});
executor.shutdown();Java 8引入了更灵活的线程池创建方式,推荐使用ThreadPoolExecutor的构造函数来创建线程池:
// 创建一个自定义线程池
ExecutorService customExecutor = new ThreadPoolExecutor(
5, // 核心线程数
10, // 最大线程数
60, // 线程空闲时间
TimeUnit.SECONDS,
new LinkedBlockingQueue<>(100), // 任务队列
Executors.defaultThreadFactory(), // 线程工厂
new ThreadPoolExecutor.CallerRunsPolicy() // 拒绝策略
);
// 提交任务到线程池
customExecutor.execute(() -> {
System.out.println("自定义线程池执行任务");
});
// 关闭线程池
customExecutor.shutdown();Java 8引入的CompletableFuture提供了强大的异步编程能力:
// 创建异步任务
CompletableFuture<String> future1 = CompletableFuture.supplyAsync(() -> {
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
e.printStackTrace();
}
return "任务1完成";
});
CompletableFuture<String> future2 = CompletableFuture.supplyAsync(() -> {
try {
Thread.sleep(1500);
} catch (InterruptedException e) {
e.printStackTrace();
}
return "任务2完成";
});
// 组合多个异步任务
CompletableFuture<Void> allFutures = CompletableFuture.allOf(future1, future2);
// 所有任务完成后执行操作
allFutures.thenRun(() -> {
try {
System.out.println(future1.get());
System.out.println(future2.get());
System.out.println("所有任务都已完成");
} catch (InterruptedException | ExecutionException e) {
e.printStackTrace();
}
});
// 主线程继续执行其他操作
System.out.println("主线程继续执行");Java 8引入了更多的原子类,如LongAdder、DoubleAdder等,它们在高并发场景下比AtomicLong性能更好:
// 使用LongAdder进行计数器操作
LongAdder counter = new LongAdder();
// 模拟多线程环境下的计数操作
ExecutorService executorService = Executors.newFixedThreadPool(10);
for (int i = 0; i < 1000; i++) {
executorService.execute(() -> {
counter.increment();
});
}
executorService.shutdown();
executorService.awaitTermination(1, TimeUnit.SECONDS);
System.out.println("计数器值:" + counter.sum());Java 8对JVM内存模型进行了优化,永久代(PermGen)被元空间(Metaspace)取代:
// JVM参数示例 - 设置元空间大小
// -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=256mJava 11引入了ZGC(Z Garbage Collector),这是一种可伸缩的低延迟垃圾收集器:
// JVM参数示例 - 启用ZGC
// -XX:+UseZGCJava 9引入了模块系统(Jigsaw),改变了传统的类加载机制:
// 模块定义文件module-info.java示例
module com.example.myapp {
requires java.base;
requires java.sql;
exports com.example.myapp.api;
opens com.example.myapp.internal to java.reflect;
}Spring Boot 2.x引入了对响应式编程的支持,使用WebFlux替代传统的Servlet API:
// 响应式WebFlux控制器示例
@RestController
@RequestMapping("/api")
public class ReactiveController {
@GetMapping(value = "/items", produces = MediaType.TEXT_EVENT_STREAM_VALUE)
public Flux<Item> getItems() {
return Flux.interval(Duration.ofSeconds(1))
.map(i -> new Item("Item-" + i, "Description-" + i));
}
}Spring Boot 2.x支持函数式端点,提供了一种替代注解式控制器的方式:
// 函数式端点示例
@Configuration
public class RouterConfig {
@Bean
public RouterFunction<ServerResponse> route(HandlerFunction<ServerResponse> handler) {
return RouterFunctions.route(GET("/api/functional"), handler);
}
}
@Component
public class ItemHandler implements HandlerFunction<ServerResponse> {
@Override
public Mono<ServerResponse> handle(ServerRequest request) {
return ServerResponse.ok().body(Mono.just(new Item("Functional Item", "Description")), Item.class);
}
}Spring Cloud Alibaba是阿里巴巴开源的微服务解决方案:
// 添加依赖
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
</dependency>
// 配置文件application.yml
spring:
cloud:
nacos:
discovery:
server-addr: 127.0.0.1:8848
sentinel:
transport:
dashboard: 127.0.0.1:8080MySQL 8引入了窗口函数,提供了强大的数据分析能力:
-- 使用窗口函数计算每个部门的工资排名
SELECT
emp_name,
department,
salary,
RANK() OVER (PARTITION BY department ORDER BY salary DESC) AS salary_rank
FROM employees;MySQL 8支持隐藏索引,可以在不删除索引的情况下测试索引的效果:
-- 创建隐藏索引
CREATE INDEX idx_name ON employees(name) INVISIBLE;
-- 查看索引状态
SHOW INDEX FROM employees;
-- 启用隐藏索引
ALTER INDEX idx_name ON employees VISIBLE;MyBatis-Plus是MyBatis的增强工具,简化了开发流程:
// 实体类
@Data
@TableName("user")
public class User {
@TableId(type = IdType.AUTO)
private Long id;
private String name;
private Integer age;
private String email;
}
// Mapper接口
public interface UserMapper extends BaseMapper<User> {
}
// Service层使用
@Service
public class UserServiceImpl implements UserService {
@Autowired
private UserMapper userMapper;
@Override
public List<User> listUsers() {
return userMapper.selectList(null);
}
@Override
public User getUserById(Long id) {
return userMapper.selectById(id);
}
@Override
public boolean saveUser(User user) {
return userMapper.insert(user) > 0;
}
}Nacos是阿里巴巴开源的服务注册与发现、配置管理平台:
// 添加依赖
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
// 启用服务发现
@SpringBootApplication
@EnableDiscoveryClient
public class ServiceApplication {
public static void main(String[] args) {
SpringApplication.run(ServiceApplication.class, args);
}
}
// 配置文件application.yml
spring:
application:
name: service-provider
cloud:
nacos:
discovery:
server-addr: 127.0.0.1:8848Sentinel是阿里巴巴开源的流量控制、熔断降级组件:
// 添加依赖
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
</dependency>
// 定义资源和限流规则
@Service
public class OrderService {
public String createOrder(String productId) {
// 定义资源
try (Entry entry = SphU.entry("createOrder")) {
// 业务逻辑
return "订单创建成功";
} catch (BlockException e) {
// 处理限流或熔断
return "系统繁忙,请稍后再试";
}
}
}
// 配置文件application.yml
spring:
cloud:
sentinel:
transport:
dashboard: 127.0.0.1:8080
port: 8719Seata是阿里巴巴开源的分布式事务解决方案:
// 添加依赖
<dependency>
<groupId>io.seata</groupId>
<artifactId>seata-spring-boot-starter</artifactId>
</dependency>
// 配置文件application.yml
seata:
application-id: ${spring.application.name}
tx-service-group: my_test_tx_group
config:
type: nacos
nacos:
server-addr: 127.0.0.1:8848
registry:
type: nacos
nacos:
server-addr: 127.0.0.1:8848
// 服务提供者配置
@GlobalTransactional
public void business() {
// 业务逻辑
orderService.createOrder();
inventoryService.reduceStock();
accountService.reduceBalance();
}Java 19引入了Project Loom,提供了轻量级线程(虚拟线程)支持:
// 使用虚拟线程示例
ExecutorService executor = Executors.newVirtualThreadPerTaskExecutor();
try (executor) {
IntStream.range(0, 10_000).forEach(i -> {
executor.submit(() -> {
Thread.sleep(Duration.ofSeconds(1));
return i;
});
});
} // executor.close() is called implicitly, and waitsReactor是Spring生态系统中推荐的响应式编程库:
// Flux示例 - 处理多个元素
Flux<Integer> numbers = Flux.range(1, 5)
.map(i -> i * 2)
.filter(i -> i > 5);
numbers.subscribe(
num -> System.out.println("元素: " + num),
error -> System.err.println("错误: " + error),
() -> System.out.println("完成")
);
// Mono示例 - 处理单个元素
Mono<String> message = Mono.just("Hello Reactor")
.map(msg -> msg + "!")
.delayElement(Duration.ofSeconds(1));
message.subscribe(
msg -> System.out.println("消息: " + msg),
error -> System.err.println("错误: " + error),
() -> System.out.println("消息处理完成")
);Caffeine是Java 8及以上版本的高性能缓存库:
// 创建Caffeine缓存
Cache<String, Object> cache = Caffeine.newBuilder()
.maximumSize(100) // 最大缓存数量
.expireAfterWrite(10, TimeUnit.MINUTES) // 写入后10分钟过期
.build();
// 放入缓存
cache.put("key1", "value1");
// 从缓存获取
Object value = cache.getIfPresent("key1");
System.out.println("缓存值: " + value);
// 获取缓存,若不存在则通过指定方法加载
value = cache.get("key2", k -> {
// 模拟从数据库或其他数据源加载数据
return "value2";
});
System.out.println("加载后缓存值: " + value);文章中结合了Java 8/9/11/17/19等版本的新特性,以及Spring Boot 2.x、Spring Cloud Alibaba、MySQL 8等新技术,并给出了相应的实操代码和示例。你可以根据实际需求,深入学习和实践这些技术。
Java 面试题,阿里 Java 面试,Java 基础面试题,Java 架构面试题,Java 实操题,Java 面试深度解析,Java 通关必备,Java 面试热门关键字,Java 开发面试,Java 后端面试,Java 面试技巧,Java 高频面试题,Java 面试架构师,Java 面试通关,Java 面试宝典
资源地址:
https://pan.quark.cn/s/14fcf913bae6
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。