try

ReentrantLock的lock(), tryLock(), lockInterruptibly() 及使用场景示例

試著忘記壹切 提交于 2020-01-14 07:39:23
文章目录 总述 1.ReentrantLock简要介绍 2.ReentrantLock提供的获取锁的方式 2.1 lock() 2.2 tryLock() 2.3 tryLock(long timeout, TimeUnit unit) 2.4 lockInterruptibly() 3.使用场景示例 3.1 对于tryLock()的测试 3.2 tryLock(long,TimeUnit), 3.3 tryLock(long, TimeUnit) + 当线程.interrpt() ==》中断线程 3.4 lockInterruptibly() + 当前线程.interrupt() ==》中断线程 参考博文1 参考博文2 一直在用concurrent包里的东西,最近想研究一下个中细节,先从ReentrantLock提供的集中获取锁的方式开始吧。 总述 lock() 方法是平常使用得最多的一个方法,就是用来获取锁。如果锁已被其他线程获取,则进行等待。 tryLock() 方法是有返回值的,它表示用来尝试获取锁,如果获取成功,则返回true,如果获取失败(即锁已被其他线程获取),则返回false,也就说这个方法无论如何都会立即返回。在拿不到锁时不会一直在那等待。 tryLock(long time, TimeUnit unit) 方法和tryLock()方法是类似的

c# FTP操作类

拟墨画扇 提交于 2020-01-14 03:11:33
C#语言: Codee#2416 using System; using System.Collections.Generic; using System.Text; using System.IO; using System.Net; using System.Windows.Forms; using System.Globalization; namespace FtpLib { public class FtpWeb { string ftpServerIP; string ftpRemotePath; string ftpUserID; string ftpPassword; string ftpURI; /// <summary> /// 连接FTP /// </summary> /// <param name="FtpServerIP">FTP连接地址</param> /// <param name="FtpRemotePath">指定FTP连接成功后的当前目录, 如果不指定即默认为根目录</param> /// <param name="FtpUserID">用户名</param> /// <param name="FtpPassword">密码</param> public FtpWeb(string FtpServerIP, string

C#编程总结(三)线程同步

会有一股神秘感。 提交于 2020-01-14 02:13:30
线程同步 在应用程序中使用多个线程的一个好处是每个线程都可以异步执行。对于 Windows 应用程序,耗时的任务可以在后台执行,而使应用程序窗口和控件保持响应。对于服务器应用程序,多线程处理提供了用不同线程处理每个传入请求的能力。否则,在完全满足前一个请求之前,将无法处理每个新请求。然而,线程的异步特性意味着必须协调对资源(如文件句柄、网络连接和内存)的访问。否则,两个或更多的线程可能在同一时间访问相同的资源,而每个线程都不知道其他线程的操作。 "如果觉得有用,请帮顶! 如果有不足之处,欢迎拍砖!" 线程同步的方式 线程同步有:临界区、互斥区、事件、信号量四种方式   临界区(Critical Section)、互斥量(Mutex)、信号量(Semaphore)、事件(Event)的区别   1、临界区:通过对多线程的串行化来访问公共资源或一段代码,速度快,适合控制数据访问。在任意时刻只允许一个线程对共享资源进行访问,如果有多个线程试图访问公共资源,那么在有一个线程进入后,其他试图访问公共资源的线程将被挂起,并一直等到进入临界区的线程离开,临界区在被释放后,其他线程才可以抢占。   2、互斥量:采用互斥对象机制。 只有拥有互斥对象的线程才有访问公共资源的权限,因为互斥对象只有一个,所以能保证公共资源不会同时被多个线程访问。互斥不仅能实现同一应用程序的公共资源安全共享

C#编程总结(三)线程同步

不羁岁月 提交于 2020-01-14 02:12:29
注:本文为个人学习摘录,原文地址:http://www.cnblogs.com/yank/p/3227324.html 在应用程序中使用多个线程的一个好处是每个线程都可以异步执行。对于 Windows 应用程序,耗时的任务可以在后台执行,而使应用程序窗口和控件保持响应。对于服务器应用程序,多线程处理提供了用不同线程处理每个传入请求的能力。否则,在完全满足前一个请求之前,将无法处理每个新请求。然而,线程的异步特性意味着必须协调对资源(如文件句柄、网络连接和内存)的访问。否则,两个或更多的线程可能在同一时间访问相同的资源,而每个线程都不知道其他线程的操作。 "如果觉得有用,请帮顶! 如果有不足之处,欢迎拍砖!" 线程同步的方式 线程同步有:临界区、互斥区、事件、信号量四种方式   临界区(Critical Section)、互斥量(Mutex)、信号量(Semaphore)、事件(Event)的区别   1、临界区:通过对多线程的串行化来访问公共资源或一段代码,速度快,适合控制数据访问。在任意时刻只允许一个线程对共享资源进行访问,如果有多个线程试图访问公共资源,那么在有一个线程进入后,其他试图访问公共资源的线程将被挂起,并一直等到进入临界区的线程离开,临界区在被释放后,其他线程才可以抢占。   2、互斥量:采用互斥对象机制。 只有拥有互斥对象的线程才有访问公共资源的权限

JDBC管理事务

寵の児 提交于 2020-01-14 02:10:12
package com.fgy.jdbc; import java.sql.*; /** * 转账小案例 */ public class tx { public static void main(String[] args) { Connection conn = null; PreparedStatement pstm1 = null; PreparedStatement pstm2 = null; try { // 1.导入驱动jar包 // 2.注册驱动 Class.forName("com.mysql.jdbc.Driver"); // 3.获取连接 conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/db1", "root", "root"); // 开启事务 conn.setAutoCommit(false); // 4.定义SQL语句 // fan给li转账500 String sql1 = "update account set balance = balance - ? where name = ?"; String sql2 = "update account set balance = balance + ? where name = ?"; // 5.获取statement对象

第八周动手动脑

一世执手 提交于 2020-01-14 01:50:18
动手动脑一: 请阅读并运行AboutException.java示例 AboutException.java 答: 结论: 异常 (Exception):发生于程序执行期间,表明出现了一个非法的运行状况。许多JDK中的方法在检测到非法情况时,都会抛出一个异常对象。 例如:数组越界和被0除 动手动脑二:多层的异常捕获-1 阅读以下代码(CatchWho.java),写出程序运行结果: CatchWho 答:运行结果: ArrayIndexOutOfBoundsException/内层try-catch 发生ArithmeticException 动手动脑二:多层的异常捕获-2 阅读以下代码(CatchWho.java),写出程序运行结果: CatchWho2 答:运行结果: ArrayIndexOutOfBoundsException/外层try-catch 动手动脑三: 请先阅读 EmbedFinally.java示例,再运行它,观察其输出并进行总结。 EmbededFinally 答:运行结果: 异常清除之前: Exception in thread "main" java.lang.Error: 无法解析的编译问题: 标记“.”上有语法错误,删除此标记 at ceshi.CatchWho2.main(CatchWho2.java:70) 异常清除之后: in Level 1

J2SE(13)之网络编程(Socket实现多人聊天)

南笙酒味 提交于 2020-01-14 01:29:40
1、初始版本 该版本实现:客户端可以把键盘录入的消息发送到服务端,服务端再把这个消息返回给客户端: 1.1 服务端 import java.io.DataInputStream; import java.io.DataOutputStream; import java.io.IOException; import java.net.ServerSocket; import java.net.Socket; public class ChatServer { public static void main(String[] args) throws IOException { ServerSocket server = new ServerSocket(9999); Socket socket = server.accept(); //获取输入输出流 DataInputStream dis = new DataInputStream(socket.getInputStream()); DataOutputStream dos = new DataOutputStream(socket.getOutputStream()); //获取数 String msg = dis.readUTF(); //输出信息 dos.writeUTF("服务端接收到消息:"+msg); dos.flush

JDBC案例

十年热恋 提交于 2020-01-13 19:00:04
1.登录案例 工具类 1 package day2_JDBC; 2 3 import java.sql.*; 4 5 /** 6 * JDBC工具类 7 */ 8 public class JDBCUtils { 9 private static String driver = "com.mysql.jdbc.Driver"; 10 private static String url = "jdbc:mysql://localhost/db3"; 11 private static String user = "root"; 12 private static String password = "root"; 13 14 static { 15 try { 16 Class.forName(driver); 17 } catch (ClassNotFoundException e) { 18 e.printStackTrace(); 19 } 20 } 21 /** 22 * 获取连接 23 * 24 * @return 连接对象 25 */ 26 public static Connection getConnection() throws SQLException { 27 return DriverManager.getConnection(url,user

求超大文件上传方案( vue )

蹲街弑〆低调 提交于 2020-01-13 10:47:13
java 两台服务器之间,大文件上传(续传),采用了 Socket 通信机制以及 JavaIO 流两个技术点,具体思路如下: 实现思路: 1 、服:利用 ServerSocket 搭建服务器,开启相应端口,进行长连接操作 2 、服:使用 ServerSocket.accept() 方法进行阻塞,接收客户端请求 3 、服:每接收到一个 Socket 就建立一个新的线程来处理它 4 、客:利用 Socket 进行远程连接,询问已上传进度 5 、客:使用 FileInputStream.skip(long length) 从指定位置读取文件,向服务器发送文件流 6 、服:接收客户端输入流,使用 RandomAccessFile.seek(long length) 随机读取,将游标移动到指定位置进行读写 7 、客 / 服:一个循环输出,一个循环读取写入 8 、示例:以下是具体代码,仅供参考 文件介绍: FileUpLoadServer.java (服务器接收文件类) FileUpLoadClient.java (客户端发送文件类) FinalVariables.java (自定义参数类) SocketServerListener.java ( JavaWeb 启动 Socket 操作类) web.xml (配置文件,跟随项目启动) 断点上传(服务端) package com . cn .

动手动脑第五波异常处理

时光毁灭记忆、已成空白 提交于 2020-01-13 03:03:14
注意: 1.可以有多个catch语句块,每个代码块捕获一种异常。在某个try块后有两个不同的catch 块捕获两个相同类型的异常是语法错误。 2.使用catch语句,只能捕获Exception类及其子类的对象。因此,一个捕获Exception对象的catch语句块可以捕获所有“可捕获”的异常。 3.将catch(Exception e)放在别的catch块前面会使这些catch块都不执行,因此Java不会编译这个程序。 4. package 异常处理; public class CatchWho { public static void main(String[] args) { try { try { throw new ArrayIndexOutOfBoundsException(); } catch(ArrayIndexOutOfBoundsException e) { System.out.println( "ArrayIndexOutOfBoundsException" + "/内层try-catch"); } throw new ArithmeticException(); //throw new ArrayIndexOutOfBoundsException(); } catch(ArithmeticException e) { System.out.println(