try

005多线程Thread

旧巷老猫 提交于 2020-01-14 21:58:07
多线程Thread 多进程概述 进程 多线程 线程调度 线程调度概述 线程优先级 设置对象优先级 线程控制:其他方法 线程睡眠sleep 线程加入 join(): 线程礼让,暂停当前线程,执行其他线程 后台线程 中断线程 线程的生命周期 实现多线程 1.继承Thread类 线程名称 获取线程名称 设置线程名称:2种 2.实现Runnable接口(常用) 概述 实现 线程安全问题 实现卖电影票案例(不安全) 方式1:继承Thread类 方式2:实现Runnable接口 问题分析:同票和负数票 同步(synchronized) 同步概述 同步方法 同步代码块 买票同步代码块 同步方法 买票同步方法 方法1 方法2 方法3:静态方法锁 银行存钱案例 Lock锁(JDK5之后) Lock锁卖票案例 线程死锁 死锁问题及其代码 死锁案例 方法1 方法2: 线程间通信 线程间通信概述 等待/唤醒机制 生产消费:加入等待唤醒机制,加入判断** 方法1(更好): 方法2: 优化生产消费问题 多生产者,多消费者的问题。烤鸭生产一只消费一只 Condition等待/唤醒机制 优化生产消费问题 线程组ThreadGroup 概述 获取线程组,名字 修改线程组 线程池 概述 Callable接口:创建线程3 1.求和案例 匿名内部类方式使用多线程 定时器 循环一次 循环调用 案例

Lock wait timeout exceeded; try restartingtransaction

橙三吉。 提交于 2020-01-14 19:55:56
事务锁,未提交,未设置事务锁超时 select * from information_schema.innodb_trx KILL trx_mysql_thread_id//trx_mysql_thread_id:具体一条记录的值 解决的办法有两个 : 第一:innodb_lock_wait_timeout 锁定等待时间改大 my.ini文件: #innodb_lock_wait_timeout = 50 修改为 innodb_lock_wait_timeout = 500 来源: CSDN 作者: Zakza 链接: https://blog.csdn.net/qq_18453581/article/details/103976961

python 3操作文件的异常处理

心不动则不痛 提交于 2020-01-14 18:12:12
在执行python脚本时,正常运行的时候,也可能发生错误,返回的错误类型就是报错信息,我们可以针对其返回的错误类型执行相应的语句,错误类型有很多,如:ValueError、TypeError、NameError、ZeroDivisionError..... 1、try / except 来个简单的语法,如下: while True: try: x = int(input('请输入一个数字:')) break except ValueError: print('您输入的不是一个数字,请再次尝试!') 执行结果如下: 请输入一个数字:d 您输入的不是一个数字,请再次尝试! 请输入一个数字:3 try语句按照如下的方式工作: 首先,执行try子句(在关键字try和except之间的语句)。 如果没有发生异常,则忽略except子句,try子句执行后结束。 如果在执行try子句的过程中发生了异常,那么try子句余下的部分将会被忽略,如果异常类型和except之后定义的异常类型相同,则会执行except关键字下的子句。 如果一个异常没有与任何except匹配,那么这个异常将会传递给上层的try中。 一个try语句可以包含多个except子句,分别来处理不同的特定异常,但是最多只有一个except分支会被执行。 处理程序将只针对对应的try子句中的异常进行处理

20.java-JDBC连接mysql数据库详解

走远了吗. 提交于 2020-01-14 17:55:49
1.JDBC介绍 jdbc (java database connectivity) 为java开发者使用数据库提供了统一的编程接口,它由一组java类和接口组成。 JDBC需要用到的类和接口有: DriverManager、Connection、Statement、ResultSet 2. mysql-connector-java下载 本机的mysql版本是5.7.26 win32的,所以本章访问mysql都以该版本为例: 然后进入 https://dev.mysql.com/downloads/connector/j/ 下载mysql-connector-java.jar包,用于连接mysql 如下图所示,只有8.0.19版本,那我们下载它就好了,反正不管64位还是32位都能访问: 下载解压后,就有个mysql-connector-java-8.0.19.jar: 接下来就来测试,能不能访问 3.JDBC使用过程 3.1 通过DriverManager. registerDriver( Driver driver)来注册驱动程序 需要注意,new Driver的时候,需要选择com.mysql.cj.jdbc.Driver: 因为com.mysql.jdbc.Driver已经被弃用了. PS: 也可以直接将 DriverManager. registerDriver

有关Java异常的十大问题

三世轮回 提交于 2020-01-14 13:14:53
前阵子在复习的时候,综合了优锐课的学习笔记,对基础知识进行了一个整理的概括。特总结了有关Java异常的十大常见问题。码了很多专业的相关知识, 分享给大家参考学习。 1.已检查与未检查 简而言之,必须在方法中显式捕获已检查的异常,或在方法的throws子句中声明该异常。未检查的异常是由无法解决的问题引起的,例如被零除,空指针等。检查的异常特别重要,因为你希望使用API​​的其他开发人员知道如何处理异常。 例如,IOException是一个常用的已检查异常,而RuntimeException是一个未检查的异常。你可以在阅读其余内容之前先检查一下Java异常层次结构图。 2.异常管理的最佳实践 如果可以正确处理异常,则应将其捕获,否则应将其引发。 3.为什么在try中定义的变量不能用于catch或final? 在以下代码中,在try块中声明的字符串s不能在catch子句中使用。该代码不通过编译。 try { File file = new File("path"); FileInputStream fis = new FileInputStream(file); String s = "inside"; } catch (FileNotFoundException e) { e.printStackTrace(); System.out.println(s); }

Java并发

假如想象 提交于 2020-01-14 12:15:42
编程问题中相当大的一部分都可以通过使用顺序编程来解决。 对于某些问题,如果能够并行地执行程序中的多个部分,则会变得非常方便。 并行编程可以使程序执行速度得到极大地提高。 当并行执行的任务彼此开始产生互相干涉时,实际的并发问题就会接踵而至。 Web服务器经常包含多个处理器,而并发是充分利用这些处理器的理想方式。 1.基本的线程机制 并发编程使我们可以将程序划分为多个分离的、独立运行的 任务 。 通过使用 多线程 机制,这些独立任务中的每一个都将由执行线程来驱动。 一个线程就是在 进程 中的一个单一的顺序控制流。 单个进程可以拥有多个并发执行的任务,但是你的程序使得每个任务都好像有自己的CPU一样。其底层机制是切分CPU时间,但通常你不需要考虑它。 在使用线程时,CPU将轮流给每个任务分配其占用时间,每个任务都觉得自己在一直占用CPU,但事实上CPU时间是划分成片段分配给了所有的任务。 多任务和多线程往往是使用多处理器系统的最合理方式。 1.1 定义任务 线程可以驱动任务,你需要一种描述任务的方式,这可以由 Runnable 接口来提供。 public class LiftOff implements Runnable { protected int countDown = 10; // Default private static int taskCount = 0; private

Java并发学习 & Executor学习 & 异常逃逸 & 同步互斥Best Practice & wait/notify, conditon#await/signal

陌路散爱 提交于 2020-01-14 12:11:55
看了这篇文章: http://www.ciaoshen.com/2016/10/28/tij4-21/ 有一些Java并发的内容,另外查了一些资料。 朴素的Thread 首先,Java中关于线程Thread最基本的事实是: 除非通过Native方法将本地线程加入JVM,创建线程唯一的方法就是“创建一个Thread类的实例对象,然后调用它的start()方法。” 其次,关于Thread对象实例的构造,需要注意,start()方法依赖于run()方法: 要么传递一个Runnable对象给构造器做参数。 要么重写Thread自己的run()方法。 第一种方法是实现Runnable接口。 注意, Runnable里面获取线程信息需要用 Thread.currentThread() package com.company; class MyRunnable implements Runnable { public void run() { try { Thread.sleep((long)(Math.random() % 5 * 1000 + 1000)); } catch (InterruptedException e) { e.printStackTrace(); } System.out.printf("Here is thread %d\n", Thread

JAVA面试题 请谈谈你对Sychronized关键字的理解?

别说谁变了你拦得住时间么 提交于 2020-01-14 12:05:46
面试官:sychronized关键字有哪些特性? 应聘者: 可以用来修饰方法; 可以用来修饰代码块; 可以用来修饰静态方法; 可以保证线程安全; 支持锁的重入; sychronized使用不当导致死锁; 了解sychronized之前,我们先来看一下几个常见的概念:内置锁、互斥锁、对象锁和类锁。 内置锁 在Java中每一个对象都可以作为同步的锁,那么这些锁就被称为内置锁。线程进入同步代码块或方法的时候会自动获得该锁,在退出同步代码块或方法时会释放该锁。获得内置锁的唯一途径就是进入这个锁的保护的同步代码块或方法。 互斥锁 内置锁同时也是一个互斥锁,这就是意味着最多只有一个线程能够获得该锁,当线程A尝试去获得线程B持有的内置锁时,线程A必须等待或者阻塞,直到线程B抛出异常或者正常执行完毕释放这个锁;如果B线程不释放这个锁,那么A线程将永远等待下去。 对象锁和类锁 对象锁和类锁在锁的概念上基本上和内置锁是一致的,但是,两个锁实际是有很大的区别的。 对象锁是用于对象实例方法; 类锁是用于类的静态方法或者一个类的class对象上的 一个对象无论有多少个同步方法区,它们共用一把锁,某一时刻某个线程已经进入到某个synchronzed方法,那么在该方法没有执行完毕前,其他线程无法访问该对象的任何synchronzied 方法的,但可以访问非synchronzied方法。

jsp文件分片上传,断点续传

心不动则不痛 提交于 2020-01-14 10:47:44
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 .

[MAC]Permission denied, please try again.

℡╲_俬逩灬. 提交于 2020-01-14 09:36:15
使用ssh远程连接另一台服务器 ssh <username>@ip #username为要登陆的用户名 如图,输入密码后报权限错误( 已经确认,密码是正确的 ) 原因: usrname登录名不一致 修改username后,即可ssh登录成功 参考文档 : SSH登陆:Permission denied, please try again. 来源: https://www.cnblogs.com/kaerxifa/p/12190286.html