多线程查询数据库

时间: 2023-06-29 19:19:14 浏览: 24
多线程查询数据库可以提高查询效率,提高系统的性能和响应速度。以下是一个简单的多线程查询数据库的示例: ```java public class DatabaseQuery { private static final int THREAD_COUNT = 5; private static final ExecutorService executorService = Executors.newFixedThreadPool(THREAD_COUNT); public static void main(String[] args) throws InterruptedException, ExecutionException { List<Future<?>> futures = new ArrayList<>(); for (int i = 1; i <= THREAD_COUNT; i++) { final int threadNum = i; Future<?> future = executorService.submit(() -> { try (Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/test", "root", "123456")) { String sql = "SELECT * FROM user WHERE id = ?"; PreparedStatement statement = conn.prepareStatement(sql); statement.setInt(1, threadNum); ResultSet resultSet = statement.executeQuery(); while (resultSet.next()) { System.out.println(resultSet.getString("name")); } } catch (SQLException e) { e.printStackTrace(); } }); futures.add(future); } for (Future<?> future : futures) { future.get(); } executorService.shutdown(); } } ``` 在上面的代码中,我们创建了一个固定大小的线程池,并使用 `submit()` 方法提交了多个查询任务。每个线程都会查询数据库中 `user` 表中的一条数据,并输出其 `name` 字段的值。在主线程中,我们等待所有任务完成后关闭线程池。 需要注意的是,在多线程查询数据库时,需要确保连接对象(Connection)和语句对象(Statement/PreparedStatement)是线程安全的。通常情况下,我们可以使用线程池来管理连接对象,每个线程都从线程池中获取连接对象,使用完后将其归还到连接池中。这样可以避免频繁地创建和销毁连接对象,提高系统的性能和稳定性。

相关推荐

MySQL是一个开源的关系型数据库管理系统,可以支持多线程查询数据库。通过使用多线程,可以同时执行多个查询操作,从而提高数据库的并发性和响应速度。 DBSqlMan是一个多线程访问MySQL的动态库,它是基于MySQL5开源的Windows下使用的MySQL二次开发库。DBSqlMan提供了一个简单的示例应用程序testDb,可以用来演示如何使用DBSqlMan进行多线程查询数据库。整个工程已经在VS2005下运行通过,并在实际应用中使用过。你可以从MySQL官网上下载MySQL5和DBSqlMan。 在本资源中,提供的源码经过本地编译并且可以运行。你只需要按照文档中的指导配置好环境,就可以使用这些资源进行MySQL的多线程查询。这些资源的源码系统完整,并经过专业老师的审定,可以满足基本的学习和使用参考需求。所以你可以放心地下载和使用这些资源。123 #### 引用[.reference_title] - *1* [多线程访问mysql数据库](https://download.csdn.net/download/newstream2013/8337817)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [Java Web课程设计,基于servlet+jsp+mysql做的影视管理系统.zip](https://download.csdn.net/download/qq_35831906/88259841)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [多线程并发查询mysql数据库中的数据](https://blog.csdn.net/weixin_34161064/article/details/94541053)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]
在Java中,可以使用多线程来并发查询数据库。引用中提供了一个使用线程池控制分页并发查询的示例代码。首先,根据数据集合的大小和需要开启的线程数,确定每个线程处理的数据条数。然后,创建一个线程池,并循环创建线程,每个线程负责查询各自范围内的数据。查询的结果可以保存在一个列表中,以便后续处理。最后,执行完毕后关闭线程池。 另外,还可以使用Callable和Future来实现多线程查询数据库。引用中提供了一个使用Callable方式的示例代码。在call()方法中,可以创建数据库连接,并执行查询操作。查询结果可以存储在一个列表中,并通过返回值返回给主线程。 总结起来,使用多线程查询数据库可以提高查询效率,特别是对于大量数据的查询。通过合理地分配线程和利用线程池,可以实现并发查询并提高系统的响应速度。123 #### 引用[.reference_title] - *1* [java多线程查询数据库](https://download.csdn.net/download/haolilaoda/10144194)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [java多线程查询数据库(分段查询)](https://blog.csdn.net/weixin_40052298/article/details/123356715)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [【多线程】Java实现多线程查询数据库并返回值](https://blog.csdn.net/Damionew/article/details/103564156)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]
在 Java 中,你可以使用多线程来查询数据库。这样可以提高查询效率,特别是在需要处理大量数据的情况下。下面是一个简单的示例代码: java import java.sql.*; public class DatabaseQueryThread extends Thread { private String query; public DatabaseQueryThread(String query) { this.query = query; } @Override public void run() { // 在这里执行数据库查询操作 try { Class.forName("com.mysql.jdbc.Driver"); Connection connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/mydatabase", "username", "password"); Statement statement = connection.createStatement(); ResultSet resultSet = statement.executeQuery(query); // 处理查询结果 while (resultSet.next()) { // ... } // 关闭连接 resultSet.close(); statement.close(); connection.close(); } catch (Exception e) { e.printStackTrace(); } } public static void main(String[] args) { // 创建多个查询线程 DatabaseQueryThread thread1 = new DatabaseQueryThread("SELECT * FROM table1"); DatabaseQueryThread thread2 = new DatabaseQueryThread("SELECT * FROM table2"); // 启动线程 thread1.start(); thread2.start(); // 等待线程执行完毕 try { thread1.join(); thread2.join(); } catch (InterruptedException e) { e.printStackTrace(); } } } 在上面的示例中,我们创建了一个继承自 Thread 的自定义线程类 DatabaseQueryThread,并在 run 方法中执行数据库查询操作。我们可以创建多个 DatabaseQueryThread 实例,并分别传入不同的查询语句。然后,通过调用 start 方法启动线程,并使用 join 方法等待线程执行完毕。 需要注意的是,在实际的应用中,你可能需要使用连接池来管理数据库连接,以提高性能和资源利用率。此外,还需要注意线程安全性和并发控制,确保多个线程之间不会相互干扰或产生冲突。
在Java中使用多线程查询数据库进行数据汇总,可以采用以下步骤: 1. 导入相关的库,如 java.sql、java.util.concurrent。 2. 创建一个数据库连接池,用于多线程共享数据库连接。 3. 定义一个查询任务类,该类实现 Runnable 接口,用于执行查询并将查询结果保存到共享的数据结构中。 4. 创建多个查询任务对象,并将它们添加到线程池中。 5. 等待所有查询任务完成,并汇总结果。 以下是一个简单的示例代码: java import java.sql.*; import java.util.concurrent.*; public class Main { // 创建数据库连接池 static BlockingQueue<Connection> dbPool = new ArrayBlockingQueue<>(10); static { try { for (int i = 0; i < 10; i++) { Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/test", "root", "password"); dbPool.put(conn); } } catch (Exception e) { e.printStackTrace(); } } // 定义查询任务类 static class QueryTask implements Runnable { String queryStr; ConcurrentMap<String, Integer> resultMap; public QueryTask(String queryStr, ConcurrentMap<String, Integer> resultMap) { this.queryStr = queryStr; this.resultMap = resultMap; } @Override public void run() { Connection conn = null; Statement stmt = null; ResultSet rs = null; try { // 从连接池中获取连接 conn = dbPool.take(); stmt = conn.createStatement(); rs = stmt.executeQuery(queryStr); // 处理查询结果 while (rs.next()) { String key = rs.getString("key"); int value = rs.getInt("value"); resultMap.merge(key, value, Integer::sum); } } catch (Exception e) { e.printStackTrace(); } finally { try { if (rs != null) rs.close(); if (stmt != null) stmt.close(); if (conn != null) dbPool.put(conn); } catch (Exception e) { e.printStackTrace(); } } } } public static void main(String[] args) throws Exception { // 创建多个查询任务 String[] queries = {"SELECT * FROM table1", "SELECT * FROM table2", "SELECT * FROM table3"}; ConcurrentMap<String, Integer> resultMap = new ConcurrentHashMap<>(); ExecutorService executor = Executors.newFixedThreadPool(10); for (String queryStr : queries) { QueryTask task = new QueryTask(queryStr, resultMap); executor.execute(task); } // 等待所有查询任务完成 executor.shutdown(); executor.awaitTermination(1, TimeUnit.MINUTES); // 汇总结果 for (String key : resultMap.keySet()) { int value = resultMap.get(key); System.out.println(key + ": " + value); } } } 在这个示例代码中,我们使用了一个 ConcurrentMap 对象来保存查询结果,它是一个线程安全的哈希表,可以在多线程环境下进行并发访问。在每个查询任务中,我们从数据库连接池中获取一个数据库连接,执行查询,并将查询结果保存到 ConcurrentMap 对象中。最后,我们使用 ExecutorService 线程池来执行查询任务,并等待所有任务完成后汇总结果。
可以使用C#的多线程和数据库查询来实现不重复的数据查询。以下是一个简单的示例代码: csharp using System; using System.Collections.Generic; using System.Data.SqlClient; using System.Threading; class Program { static HashSet<int> resultSet = new HashSet<int>(); // 用于存储查询结果的集合 static object lockObject = new object(); // 用于线程同步的锁对象 static void Main(string[] args) { int numberOfThreads = 5; // 设置线程数量 // 创建并启动多个线程 for (int i = 0; i < numberOfThreads; i++) { Thread thread = new Thread(DoDatabaseQuery); thread.Start(); } // 等待所有线程完成 while (true) { bool allDone = true; lock (lockObject) { if (resultSet.Count < numberOfThreads) { allDone = false; } } if (allDone) { break; } Thread.Sleep(100); } // 输出查询结果 foreach (int result in resultSet) { Console.WriteLine(result); } } static void DoDatabaseQuery() { // 在此处执行数据库查询,并将结果添加到resultSet集合中 // 这里只是一个示例,你需要根据具体情况修改下面的代码 using (SqlConnection connection = new SqlConnection("YourConnectionString")) { connection.Open(); SqlCommand command = new SqlCommand("SELECT DISTINCT Id FROM YourTable", connection); using (SqlDataReader reader = command.ExecuteReader()) { while (reader.Read()) { int result = reader.GetInt32(0); lock (lockObject) { resultSet.Add(result); } } } } } } 上述代码使用了一个 HashSet<int> 集合来存储查询结果,以保证结果不重复。同时使用一个 lockObject 对象作为锁来实现线程同步,避免多个线程同时修改结果集合。每个线程执行数据库查询,并将查询结果添加到结果集合中。 请注意,你需要将代码中的 YourConnectionString 替换为你自己的数据库连接字符串,并根据你的数据库表结构修改查询语句。此外,为了简化代码,我在查询语句中使用了 DISTINCT 关键字来确保返回的结果不重复,你可以根据实际需求进行修改。
在Python中,多线程写入数据库可以通过使用线程池来实现。下面是一个示例代码,演示了如何使用多线程同时写入数据库: python import threading import pymysql def write_to_database(data): # 连接数据库 conn = pymysql.connect(host='localhost', user='username', password='password', database='dbname') cursor = conn.cursor() # 执行插入操作 try: # 根据需要执行SQL语句,这里以插入操作为例 sql = "INSERT INTO table_name(column1, column2) VALUES (%s, %s)" cursor.execute(sql, (data['value1'], data['value2'])) conn.commit() print(f"Data {data} inserted successfully.") except Exception as e: conn.rollback() print(f"Error occurred while inserting data {data}: {e}") finally: # 关闭数据库连接 cursor.close() conn.close() # 创建数据列表 data_list = [ {'value1': 'data1', 'value2': 'data2'}, {'value1': 'data3', 'value2': 'data4'}, {'value1': 'data5', 'value2': 'data6'}, # 可以继续添加更多的数据 ] # 设置线程池大小 thread_pool_size = 5 # 创建线程池 thread_pool = [] # 创建线程并启动 for data in data_list: thread = threading.Thread(target=write_to_database, args=(data,)) thread_pool.append(thread) thread.start() # 等待所有线程执行完毕 for thread in thread_pool: thread.join() print("All threads have finished writing to the database.") 在上述代码中,我们首先定义了一个write_to_database函数,用于执行数据库写入操作。然后,我们创建了一个数据列表,其中包含要写入数据库的数据。接下来,我们设置了线程池的大小,并创建了一个空的线程池列表。然后,我们使用循环创建线程,并将每个线程添加到线程池中。最后,我们使用join方法等待所有线程执行完毕。 请注意,在多线程写入数据库时,需要确保数据库连接和游标对象的正确使用和关闭。此外,如果多个线程同时写入相同的数据库表,可能会出现竞态条件或锁问题,需要根据具体情况考虑使用适当的并发控制机制。
在 Java 中,可以使用多线程处理数据库操作。以下是一个简单的示例: java import java.sql.*; public class DBThread extends Thread { private Connection conn; private String sql; public DBThread(Connection conn, String sql) { this.conn = conn; this.sql = sql; } public void run() { try { Statement stmt = conn.createStatement(); stmt.executeUpdate(sql); stmt.close(); conn.close(); } catch (SQLException e) { e.printStackTrace(); } } public static void main(String[] args) throws SQLException { Connection conn = DriverManager.getConnection("jdbc:mysql://localhost/mydatabase", "username", "password"); DBThread thread1 = new DBThread(conn, "INSERT INTO mytable (col1, col2) VALUES ('val1', 'val2')"); DBThread thread2 = new DBThread(conn, "UPDATE mytable SET col1='newval' WHERE col2='val2'"); thread1.start(); thread2.start(); try { thread1.join(); thread2.join(); } catch (InterruptedException e) { e.printStackTrace(); } conn.close(); } } 在这个示例中,我们创建了一个 DBThread 类,用于执行数据库操作。我们传入了一个 Connection 对象和一个 SQL 语句作为参数,然后在 run 方法中执行 SQL 语句。我们还创建了两个线程,每个线程都执行不同的 SQL 语句。 需要注意的是,多线程处理数据库操作时需要确保线程安全。在上面的示例中,我们创建了两个线程分别执行不同的 SQL 语句,这样可以避免多个线程同时执行同一条 SQL 语句导致的问题。另外,在使用 JDBC 连接数据库时,需要确保每个线程都拥有独立的 Connection 对象,以避免多个线程同时操作同一个 Connection 对象导致的问题。
在Spring Boot中,使用多线程进行数据库访问是非常常见的需求。Spring Boot提供了多种方式来实现多线程下的数据库访问。 首先,可以利用Java的线程池Executor来管理线程,通过使用@Async注解将方法标记为异步执行的。在这种情况下,当调用标记为@Async的方法时,Spring会自动创建一个新的线程并执行该方法,而不会阻塞主线程。在异步方法中可以执行数据库访问的操作,例如从数据库中读取数据或更新数据等。通过这种方式,可以在多个线程之间实现并行的数据库访问。 另一种方式是使用Spring的异步任务支持。可以在应用程序的配置文件中开启异步任务的支持,然后使用@Async注解标记需要异步执行的方法。Spring Boot会自动创建一个线程池来执行这些方法,并将它们放入任务队列中进行处理。这种方式适用于较为复杂的、可能涉及多个数据库操作的情况。 在多线程下进行数据库访问时,需要注意一些问题。首先,要确保数据库连接是线程安全的。Spring Boot的JdbcTemplate和Spring Data JPA等都是线程安全的,可以在多个线程中共享和重用。其次,需要合理管理数据库连接池,避免出现连接泄漏或过多的连接创建导致数据库性能下降的情况。此外,还要考虑事务管理的问题,确保多线程下的数据库操作的一致性和完整性。 综上所述,Spring Boot提供了多种方式来实现多线程下的数据库访问。通过合理利用线程池、异步任务等技术,可以在多个线程之间实现数据库访问的并行操作,提高系统的性能和响应速度。同时,需要注意线程安全、连接池管理和事务管理等问题,确保数据库操作的正确性和一致性。
您好!对于查询数据库中百万条数据的情况,使用多线程和数据库分页查询是一种常见的优化策略。下面是一个基本的实现思路: 1. 多线程处理:将数据查询任务分配给多个线程并行执行,提高查询效率。可以使用Java的线程池来管理线程,例如使用ExecutorService和Callable接口。 2. 数据库分页查询:通过分页查询的方式减少单次查询的数据量,避免一次性查询大量数据导致性能问题。可以使用SQL语句中的LIMIT子句来实现分页查询,例如SELECT * FROM table_name LIMIT offset, limit,其中offset表示偏移量,limit表示每页查询的数据量。 下面是一个简单的示例代码: java import java.sql.*; import java.util.concurrent.*; public class DatabaseQuery { private static final int PAGE_SIZE = 100; // 每页查询的数据量 public static void main(String[] args) { ExecutorService threadPool = Executors.newFixedThreadPool(10); // 创建线程池 Connection connection = null; try { connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/database_name", "username", "password"); int totalRows = getTotalRows(connection); // 获取数据总行数 int totalPages = (int) Math.ceil((double) totalRows / PAGE_SIZE); // 计算总页数 for (int page = 0; page < totalPages; page++) { int offset = page * PAGE_SIZE; threadPool.submit(new QueryTask(connection, offset)); } } catch (SQLException e) { e.printStackTrace(); } finally { if (connection != null) { try { connection.close(); } catch (SQLException e) { e.printStackTrace(); } } threadPool.shutdown(); } } private static int getTotalRows(Connection connection) throws SQLException { try (Statement statement = connection.createStatement(); ResultSet resultSet = statement.executeQuery("SELECT COUNT(*) FROM table_name")) { resultSet.next(); return resultSet.getInt(1); } } private static class QueryTask implements Callable<Void> { private Connection connection; private int offset; public QueryTask(Connection connection, int offset) { this.connection = connection; this.offset = offset; } @Override public Void call() throws Exception { try (PreparedStatement statement = connection.prepareStatement("SELECT * FROM table_name LIMIT ?, ?")) { statement.setInt(1, offset); statement.setInt(2, PAGE_SIZE); ResultSet resultSet = statement.executeQuery(); // 处理查询结果 while (resultSet.next()) { // 处理每条数据 // ... } resultSet.close(); } return null; } } } 以上示例代码仅供参考,具体的实现需要根据实际情况进行调整和优化。同时,请确保在使用多线程和数据库查询时遵循相关的线程安全和数据库事务处理的规范。

最新推荐

java多线程编程之从线程返回数据的两种方法

从线程中返回数据和向线程传递数据类似。也可以通过类成员以及回调函数来返回数据。但类成员在返回数据和传递数据时有一些区别,下面让我们来看看它们区别在哪

Python爬虫进阶之多线程爬取数据并保存到数据库

今天刚看完崔大佬的《python3网络爬虫开发实战》,顿时觉得...为了避免这种尴尬,以及我突然想写博客的心情,我决定还是为大家在进行一次简易爬虫展示,总体程序我会利用多线程的方式来充分利用CPU的空闲时间,其中我也

基于51单片机的usb键盘设计与实现(1).doc

基于51单片机的usb键盘设计与实现(1).doc

"海洋环境知识提取与表示:专用导航应用体系结构建模"

对海洋环境知识提取和表示的贡献引用此版本:迪厄多娜·察查。对海洋环境知识提取和表示的贡献:提出了一个专门用于导航应用的体系结构。建模和模拟。西布列塔尼大学-布雷斯特,2014年。法语。NNT:2014BRES0118。电话:02148222HAL ID:电话:02148222https://theses.hal.science/tel-02148222提交日期:2019年HAL是一个多学科的开放存取档案馆,用于存放和传播科学研究论文,无论它们是否被公开。论文可以来自法国或国外的教学和研究机构,也可以来自公共或私人研究中心。L’archive ouverte pluridisciplinaire论文/西布列塔尼大学由布列塔尼欧洲大学盖章要获得标题西布列塔尼大学博士(博士)专业:计算机科学海洋科学博士学院对海洋环境知识的提取和表示的贡献体系结构的建议专用于应用程序导航。提交人迪厄多内·察察在联合研究单位编制(EA编号3634)海军学院

react中antd组件库里有个 rangepicker 我需要默认显示的当前月1号到最后一号的数据 要求选择不同月的时候 开始时间为一号 结束时间为选定的那个月的最后一号

你可以使用 RangePicker 的 defaultValue 属性来设置默认值。具体来说,你可以使用 moment.js 库来获取当前月份和最后一天的日期,然后将它们设置为 RangePicker 的 defaultValue。当用户选择不同的月份时,你可以在 onChange 回调中获取用户选择的月份,然后使用 moment.js 计算出该月份的第一天和最后一天,更新 RangePicker 的 value 属性。 以下是示例代码: ```jsx import { useState } from 'react'; import { DatePicker } from 'antd';

基于plc的楼宇恒压供水系统学位论文.doc

基于plc的楼宇恒压供水系统学位论文.doc

"用于对齐和识别的3D模型计算机视觉与模式识别"

表示用于对齐和识别的3D模型马蒂厄·奥布里引用此版本:马蒂厄·奥布里表示用于对齐和识别的3D模型计算机视觉与模式识别[cs.CV].巴黎高等师范学校,2015年。英语NNT:2015ENSU0006。电话:01160300v2HAL Id:tel-01160300https://theses.hal.science/tel-01160300v22018年4月11日提交HAL是一个多学科的开放获取档案馆,用于存放和传播科学研究文件,无论它们是否已这些文件可能来自法国或国外的教学和研究机构,或来自公共或私人研究中心。L’archive ouverte pluridisciplinaire博士之路博士之路博士之路在获得等级时,DOCTEURDE L'ÉCOLE NORMALE SUPERIEURE博士学校ED 386:巴黎中心数学科学Discipline ou spécialité:InformatiquePrésentée et soutenue par:马蒂厄·奥布里le8 may 2015滴度表示用于对齐和识别的Unité derechercheThèse dirigée par陪审团成员équipe WILLOW(CNRS/ENS/INRIA UMR 8548)慕尼黑工业大学(TU Munich�

valueError: Pandas data cast to numpy dtype of object. Check input data with np.asarray(data).

这个错误通常发生在使用 Pandas DataFrame 时,其中包含了一些不能被转换为数字类型的数据。 解决方法是使用 `pd.to_numeric()` 函数将数据转换为数字类型。例如: ```python import pandas as pd import numpy as np # 创建一个包含字符串和数字的 DataFrame df = pd.DataFrame({'A': ['a', 'b', 'c'], 'B': [1, 2, '3']}) # 尝试将整个 DataFrame 转换为数字类型会报错 np.asarray(df, dtype=np.float) # 使

基于VC--的五子棋程序设计与实现毕业设计.doc

基于VC--的五子棋程序设计与实现毕业设计.doc

体系结构驱动的普遍性应用程序中

体系结构驱动的普遍性应用程序的自主适应艾蒂安·甘德里勒引用此版本:艾蒂安·甘德里勒。由体系结构驱动的普遍性应用程序的自主适应。无处不在的计算。格勒诺布尔大学,2014年。法语。NNT:2014GRENM078。电话:01215004HAL ID:电话:01215004https://theses.hal.science/tel-01215004提交日期:2015年HAL是一个多学科的开放存取档案馆,用于存放和传播科学研究论文,无论它们是否被公开。论文可以来自法国或国外的教学和研究机构,也可以来自公共或私人研究中心。L’archive ouverte pluridisciplinaire论文要获得的等级格勒诺布尔大学博士专业:计算机科学部长令:2006年提交人艾蒂安·G·安德里尔论文由Philippe LAlanda指导由Stephanie CHollet共同指导在格勒诺布尔计算机科学实验室编写数学、信息科学与技术、计算机科学博士体系结构驱动的普遍性应用程序的自主适应论文�