当前位置: 首页 > news >正文

c 做网站怎么连接到别的网页什么网站专做店铺

c 做网站怎么连接到别的网页,什么网站专做店铺,中国正能量不良网站直接进入,wordpress 云主机名ThreadLocal有哪些使用场景#xff1f; 7.1 多线程场景下共享变量问题 ThreadLocal是线程本地变量#xff0c;可以存储共享变量副本#xff0c;每一个独立线程都有与共享变量一模一样的副本。ThreadLocal在当前线程下共享变量是全局共享的#xff0c;各个线程之间是相互独…ThreadLocal有哪些使用场景 7.1 多线程场景下共享变量问题 ThreadLocal是线程本地变量可以存储共享变量副本每一个独立线程都有与共享变量一模一样的副本。ThreadLocal在当前线程下共享变量是全局共享的各个线程之间是相互独立的。 ThreadLocal在多线程场景下解决共享变量问题代码案例 public class SharedVariableExample {private static ThreadLocalInteger sharedVariable new ThreadLocal();public static void main(String[] args) {ExecutorService executorService Executors.newFixedThreadPool(3);for (int i 0; i 3; i) {final int value i; // 保存当前值确保每个线程的值不同executorService.submit(() - {sharedVariable.set(value); // 将值设置到ThreadLocal中try {processValue(); // 处理共享变量} finally {sharedVariable.remove(); // 在任务完成后清除ThreadLocal的值}});}executorService.shutdown();}private static void processValue() {int value sharedVariable.get(); // 从ThreadLocal中获取值System.out.println(Thread Thread.currentThread().getName() : Value value);} }执行结果如下每个线程都有自己独立的共享变量副本并且在当前线程下任务一个地方值都是一样的(一个线程下可能存在多个方法多个方法即当前线程下共享变量全局共享) 7.2 保存系统上下文信息 在多线程环境中有时需要在线程之间传递数据但不希望通过方法参数或全局变量来传递。ThreadLocal可以在当前线程中存储数据其他线程可以通过ThreadLocal获取该数据。 使用ThreadLocal实现保存上下文信息代码案例如下 新建User类 public class User {private String username;public User(String username) {this.username username;}public String getUsername() {return username;} }新建RequestContext类用于保存信息到ThreadLocal中 public class RequestContext {private static ThreadLocalRequestContext contextHolder new ThreadLocal();private String requestId;private User currentUser;private RequestContext(String requestId, User currentUser) {this.requestId requestId;this.currentUser currentUser;}public static void setCurrentContext(String requestId, User currentUser) {RequestContext context new RequestContext(requestId, currentUser);contextHolder.set(context);}public static RequestContext getCurrentContext() {return contextHolder.get();}public String getRequestId() {return requestId;}public User getCurrentUser() {return currentUser;} }新建UserService处理请求 public class UserService {public void processRequest() {RequestContext context RequestContext.getCurrentContext();String requestId context.getRequestId();User currentUser context.getCurrentUser();System.out.println(Processing request: requestId ,Current user: currentUser.getUsername());} }模拟两个请求分别由不同的两个用户发起的请求。UserService类和RequestContext类本身没有直接的关系从程序运行结果来看信息确实从RequestContext透传到了UserService中说明ThreadLocal起到了中间作用可以用来保存系统上下文信息。 public class Main {public static void main(String[] args) {// 模拟请求1User user1 new User(Alice);RequestContext.setCurrentContext(request-1, user1);UserService userService new UserService();userService.processRequest();// 模拟请求2User user2 new User(Bob);RequestContext.setCurrentContext(request-2, user2);userService.processRequest();} }7.3 管理数据库连接 public class ConnectionManager {private static ThreadLocalConnection connectionHolder new ThreadLocal();public static Connection getConnection() throws SQLException {// 从ThreadLocal获取连接Connection connection connectionHolder.get();// 如果连接不存在则创建新连接并保存到ThreadLocalif (connection null || connection.isClosed()) {connection createConnection();connectionHolder.set(connection);}return connection;}private static Connection createConnection() throws SQLException {// 创建数据库连接String url jdbc:mysql://localhost:3306/dev;String username root;String password root;return DriverManager.getConnection(url, username, password);}public static void closeConnection() throws SQLException {// 关闭连接并从ThreadLocal中移除Connection connection connectionHolder.get();if (connection ! null !connection.isClosed()) {connection.close();}connectionHolder.remove();} }public class DatabaseService {public void performDatabaseOperation() throws SQLException {Connection connection ConnectionManager.getConnection();// 使用连接执行数据库操作// ...// 操作完成后关闭连接ConnectionManager.closeConnection();} }public class Main {public static void main(String[] args) throws SQLException {// 创建多个线程模拟并发访问Thread thread1 new Thread(() - {try {DatabaseService service new DatabaseService();service.performDatabaseOperation();} catch (SQLException e) {e.printStackTrace();}});Thread thread2 new Thread(() - {try {DatabaseService service new DatabaseService();service.performDatabaseOperation();} catch (SQLException e) {e.printStackTrace();}});// 启动线程thread1.start();thread2.start();} }一个请求对应一个数据库连接一个请求下的所有对数据库的操作都是基于该连接进行的。这样可以在一定程度上避免频繁的创建和销毁数据库连接从而提高性能。 7.4 基于ThreadLocal实现事务功能 使用ThreadLocal实现事务注解的原理是通过在每个线程中维护一个事务上下文对象将事务状态与当前线程绑定起来。当需要开启事务时通过注解或编程方式将事务上下文对象与当前线程进行关联以便在整个事务执行过程中使用相同的事务上下文对象。 首先定义一个事务上下文对象用于存储事务相关的信息例如事务状态、连接对象等。 public class TransactionContext {private Connection connection;private boolean inTransaction;// 省略构造方法和其他属性的访问方法public Connection getConnection() {return connection;}public void setConnection(Connection connection) {this.connection connection;}public boolean isInTransaction() {return inTransaction;}public void setInTransaction(boolean inTransaction) {this.inTransaction inTransaction;} }接下来定义一个事务管理器类使用ThreadLocal来存储和获取当前线程的事务上下文对象。 package com.spring6.learn.ThreadLocal.test6;import java.sql.Connection; import java.sql.SQLException;public class TransactionManager {private static ThreadLocalTransactionContext transactionContextHolder new ThreadLocal();public static void beginTransaction() {TransactionContext context new TransactionContext();transactionContextHolder.set(context);context.setInTransaction(true);}public static void commitTransaction() {TransactionContext context transactionContextHolder.get();if (context ! null context.isInTransaction()) {Connection connection context.getConnection();try {connection.commit();} catch (SQLException e) {e.printStackTrace();}context.setInTransaction(false);closeConnection(connection);}}public static void rollbackTransaction() {TransactionContext context transactionContextHolder.get();if (context ! null context.isInTransaction()) {Connection connection context.getConnection();try {connection.rollback();} catch (SQLException e) {e.printStackTrace();}context.setInTransaction(false);closeConnection(connection);}}public static Connection getCurrentConnection() {TransactionContext context transactionContextHolder.get();if (context ! null) {return context.getConnection();}return null;}public static void setCurrentConnection(Connection connection) {TransactionContext context transactionContextHolder.get();if (context null) {context new TransactionContext();transactionContextHolder.set(context);}context.setConnection(connection);}private static void closeConnection(Connection connection) {try {if (connection ! null !connection.isClosed()) {connection.close();}} catch (SQLException e) {e.printStackTrace();}} }public class TransactionManagerTest {private Connection connection;Beforepublic void setUp() throws SQLException {connection DriverManager.getConnection(jdbc:mysql://localhost:3306/mysql, root, root);TransactionManager.setCurrentConnection(connection);TransactionManager.beginTransaction();}Afterpublic void tearDown() throws SQLException {TransactionManager.rollbackTransaction();TransactionManager.setCurrentConnection(null);if (connection ! null !connection.isClosed()) {connection.close();}}Testpublic void testTransaction() throws SQLException {// 在事务中插入一条数据String insertQuery INSERT INTO mytable (name) VALUES (?);try (PreparedStatement statement connection.prepareStatement(insertQuery)) {statement.setString(1, John Doe);statement.executeUpdate();}// 在事务中查询数据String selectQuery SELECT COUNT(*) FROM mytable;try (PreparedStatement statement connection.prepareStatement(selectQuery)) {ResultSet resultSet statement.executeQuery();if (resultSet.next()) {int count resultSet.getInt(1);assertEquals(1, count); // 验证插入的数据是否存在}}} }TransactionManager.beginTransaction(); } After public void tearDown() throws SQLException {TransactionManager.rollbackTransaction();TransactionManager.setCurrentConnection(null);if (connection ! null !connection.isClosed()) {connection.close();} }Test public void testTransaction() throws SQLException {// 在事务中插入一条数据String insertQuery INSERT INTO mytable (name) VALUES (?);try (PreparedStatement statement connection.prepareStatement(insertQuery)) {statement.setString(1, John Doe);statement.executeUpdate();}// 在事务中查询数据String selectQuery SELECT COUNT(*) FROM mytable;try (PreparedStatement statement connection.prepareStatement(selectQuery)) {ResultSet resultSet statement.executeQuery();if (resultSet.next()) {int count resultSet.getInt(1);assertEquals(1, count); // 验证插入的数据是否存在}} } }
http://www.huolong8.cn/news/136682/

相关文章:

  • 内江网站建设免费网站地址申请
  • 东莞网站建设营销哪家好什么网站可以做问卷调查
  • 如何制作简单的网站手机平板购物网站的设计背景
  • 如何做网站 做论坛域名搭建网站
  • 有哪些做ppt用图片的网站有哪些百度网站抓取
  • 网站后缀 .cgi企业网站管理系统视频教程
  • 丽水企业网站建设莲塘网站建设
  • it网站开发百度首页广告
  • 精品课程网站设计报告12580黄页推广
  • 网站设计这个专业怎么样网络科技公司骗术
  • 品牌设计网站大全网站建设费摊多久
  • 网推公司怎么收费荥阳网站优化公司
  • 商会网站建设方案书教育网站的开发与建设论文
  • 中信建设有限责任公司电话号码手机网站优化怎么做
  • 梦扬科技 合肥网站建设杭州做网站软件
  • 网站站长英语电商网站开发主要技术问题
  • 地方o2o同城网站源码wordpress添加微信公众号
  • 古腾堡布局的网站东莞建设一个网站
  • 做博客网站赚钱吗站长之家素材网
  • 北仑网站网页建设wordpress4
  • 网站搭建费用明细二手房网站制作教程
  • 网站建设企业文化番号网站怎么做
  • my eclipse网站开发建设企业功能型网站
  • 可以在线制作网页的网站品牌网站查询
  • 建网站用什么工具印度域名注册网站
  • wordpress企业站主题下载浙江省通信管理局 网站备案
  • 重庆品牌型网站建设多少钱站长工具查询网站
  • 网站用什么字体建设手机银行
  • 做网站给文件不侵权腾讯云建站平台
  • 网页设计网站规划报告建立网站的方案