try

java线程(2)--同步和锁

醉酒当歌 提交于 2020-03-20 00:11:24
参考转载:http://rainyear.iteye.com/blog/1734311 http://turandot.iteye.com/blog/1704027 http://www.cnblogs.com/fguozhu/articles/2657904.html http://lavasoft.blog.51cto.com/62575/99155 http://www.cnblogs.com/dolphin0520/p/3923167.html 1.线程的内存模型 Java作为平台无关性语言,JLS(Java语言规范)定义了一个统一的内存管理模型 JMM (Java Memory Model),JMM屏蔽了底层平台内存管理细节,在多线程环境中必须解决可见性和有序性的问题。JMM规定了jvm有 主内存 (Main Memory)和 工作内存 (Working Memory) ,主内存存放程序中所有的类实例、静态数据等变量,是多个线程共享的,而工作内存存放的是该线程从主内存中拷贝过来的变量以及访问方法所取得的局部变量,是每个线程私有的其他线程不能访问,每个线程对变量的操作都是以先从主内存将其拷贝到工作内存再对其进行操作的方式进行,多个线程之间不能直接互相传递数据通信,只能通过共享变量来进行。 重要的图片看三遍,从三个内存模型的文章中摘出的图片含义是一致的。即: 1

68、TSPL指令集(标签打印机)

跟風遠走 提交于 2020-03-19 19:59:41
0、开发者pdf、sdk等资料详见: http://download.csdn.net/detail/kunyashaw/9376694 1、测试代码 包含文字打印、条形码打印、二维码打印 1 package com.huofu.speechundecrypt; 2 3 import android.content.Context; 4 import android.os.Bundle; 5 import android.support.v7.app.AppCompatActivity; 6 import android.view.View; 7 import android.widget.Button; 8 9 import java.io.UnsupportedEncodingException; 10 11 public class MainActivity extends AppCompatActivity { 12 13 Context ctxt; 14 15 @Override 16 protected void onCreate(Bundle savedInstanceState) { 17 super.onCreate(savedInstanceState); 18 19 Button btn = new Button(getApplicationContext()

并发工具类和线程池

…衆ロ難τιáo~ 提交于 2020-03-19 17:53:22
工具类 CountDownLatch 利用它可以实现类似计数器的功能。比如有一个任务A,它要等待其他4个任务执行完毕之后才能执行,此时就可以利用CountDownLatch来实现这种功能了。 package com.yjc.juc; import java.util.concurrent.CountDownLatch; public class CountDownLatchDemo { public static void main(String[] args) throws InterruptedException { System.out.println("主线程启动---->等待子线程执行完毕"); //代表等待两个线程执行完主线程才继续执行 CountDownLatch countDownLatch=new CountDownLatch(2); new Thread(() -> { System.out.println("第一个子线程" + Thread.currentThread().getName() + "正在执行"); countDownLatch.countDown(); System.out.println("第一个子线程" + Thread.currentThread().getName() + "执行完毕"); }).start(); new Thread(

如何编写没有Try/Catch的程序

╄→尐↘猪︶ㄣ 提交于 2020-03-19 13:40:28
在上面一篇文章《 谈谈关于MVP模式中V-P交互问题 》中,我提到最近一直为一个项目进行Code Review的工作,从中发现了一些问题,同时也有了一些想法。上次谈到如何正确编写服务MVP规范的程序,这次我们来关注一个我们每天都会面对的问题:异常处理。 一、异常处理不简单 个人觉得,异常处理对于程序员来说,尤其是对于那些初级.NET程序员来说,是 最为熟悉的同时也是最难掌握 的。说它熟悉,因为仅仅就是Try/Catch而已。说它难以掌握,很多开发人员却说不清楚Try/Catch应该置于何处?什么情况下需要对异常进行日志记录?什么情况下需要对异常进行封装?什么情况下需要对异常进行替换?对于捕获的异常,在什么情况下需要将其再次抛出?什么情况下则不需要。总之,异常处理没有我们想象的那么简单。 无论对于何种类型的应用,异常处理都是必不可少的。合理的异常处理应该是 场景驱动 的,在不同的场景下,采用的异常处理策略往往是不同的。 异常处理的策略应该是可配置的 ,因为应用程序出现怎样的异常往往是不可预测的,现有异常策略的不足往往需要在真正出现某种异常的时候才会体现出来,所以我们需要一种动态可配置的异常处理策略维护方式。目前有一些开源的异常处理框架提供了这种可配置的、场景驱动的异常处理方式,EnterLib的Exception Handling Application Block就是一个不错的选择

Hibernate各种查询操作(一)

十年热恋 提交于 2020-03-19 05:52:32
测试数据库如下 t_sort表: t_good表: 一、对象导航方式查询   查询所有食品类下面的食品   代码:    //对象导航查询 @Test public void Test1(){ SessionFactory sessionFactory = null; Session session = null; Transaction tx = null; try { sessionFactory = HibernateUtils.getFactory(); session = sessionFactory.openSession(); tx = session.beginTransaction(); //1、使用get方法查询出食品类 Sort food = session.get(Sort.class, 1); //2、使用sort对象的方法得到所有食品类中的食品 Set<Good> set = food.getSetGoods(); //3、遍历set集合 for (Good good : set) { System.out.println(good); } tx.commit(); } catch (Exception e) { tx.rollback(); }finally{ session.close(); sessionFactory.close(); } }  

python中try except处理程序异常的三种常用方法

孤者浪人 提交于 2020-03-18 18:37:46
3 月,跳不动了?>>> 如果你在写python程序时遇到异常后想进行如下处理的话,一般用try来处理异常,假设有下面的一段程序: try: 语句1 语句2 . . 语句N except .........: do something ....... 但是你并不知道"语句1至语句N"在执行会出什么样的异常,但你还要做异常处理,且想把出现的异常打印出来,并不停止程序的运行,所以在"except ......"这句应怎样来写呢? 总结了一下 3个方法 : 方法一:捕获所有异常 try: a=b b=c except Exception,e: print Exception,":",e 方法二:采用traceback模块查看异常 #引入python中的traceback模块,跟踪错误 import traceback try: a=b b=c except: traceback.print_exc() 发生异常时,Python能“记住”引发的异常以及程序的当前状态。Python还维护着traceback(跟踪)对象,其中含有异常发生时与函数调用堆栈有关的信息。记住,异常可能在一系列嵌套较深的函数调用中引发。程序调用每个函数时,Python会在“函数调用堆栈”的起始处插入函数名。一旦异常被引发,Python会搜索一个相应的异常处理程序。如果当前函数中没有异常处理程序,当前函数会终止执行

5.线程的八大核心基础知识之Thread和Object类中的重要方法详解

那年仲夏 提交于 2020-03-18 18:14:17
一.概述 二.方法概览 三.wait,notify,notifyAll方法详解 1.作用和用法:阻塞阶段、唤醒阶段、遇到中断 wait作用是释放锁,当前线程进入等待, notify和notifyAll作用是通知等待线程可以执行 wait,notify,notifyAll都必须放到同步代码块中 (1)wait和notify基本用法展示: 首先thread1线程拿到object对象锁住object后执行进入到wait方法后释放了锁,进入了等待状态 然后thread2线程拿到object对象锁住object后执行notify通知等待的线程可以运行了,然后继续执行run方法到结束 最后thread1拿到锁继续执行run方法到结束 /** * 展示wait和notify的基本用法:1.研究代码执行顺序 2.证明wait释放锁 */ public class Wait { public static Object object = new Object(); static class Thread1 extends Thread{ @Override public void run() { synchronized (object){ System.out.println(Thread.currentThread().getName() + "开始执行了"); try { object

常用类

依然范特西╮ 提交于 2020-03-18 17:16:46
# 基本数据类 基本数据类型都在java.lang包中有Byte、Integer、Short、Long、Float、Double、Character 构造 直接将对应类型的付给对象即可用数据类型+Value获得值 Character 类 public static boolean isDigit(char ch) 如果ch是数字字符方法返回 true,否则返回false。 public static boolean isLetter(char ch) 如果ch是字母方法返回 true,否则返回false。 public static boolean isLetterOrDigit(char ch) 如果ch是数字字符或字母方法返回 true,否则返回false。 public static boolean isLowerCase(char ch) 如果ch是小写字母方法返回 true,否则返回false。 public static boolean isUpperCase(char ch) 如果ch是大写字母方法返回 true,否则返回false。 public static char toLowerCase(char ch) 返回ch的小写形式。 public static char toUpperCase(char ch) 返回ch的大写形式。 public static

rke高可用部署K8S集群及rancher server 高可用

不羁的心 提交于 2020-03-18 13:51:27
环境说明: # 工作系统: win 10 on linux # 操作系统:centos7 # docker版本:19.03.5 # rancher版本: latest # rke 版本: v1.0.4 # K8S master 节点IP:192.168.2.175,192.168.2.176,192.168.2.177 # K8S worker节点IP: 192.168.2.175,192.168.2.176,192.168.2.177,192.168.2.185,192.168.2.187 # K8S etcd 节点IP:192.168.2.175,192.168.2.176,192.168.2.177 # helm 版本:v3.0.2 部署准备: # 操作在所有节点进行 # 修改内核参数: 关闭swap vim /etc/sysctl.conf vm.swappiness=0 net.ipv4.ip_forward = 1 net.bridge.bridge-nf-call-ip6tables = 1 net.bridge.bridge-nf-call-iptables = 1 sysctl -p 临时生效 swapoff -a && sysctl -w vm.swappiness=0 # 修改 fstab 不在挂载 swap vi /etc/fstab # /dev

Python之旅.第七章.异常处理

血红的双手。 提交于 2020-03-18 11:53:50
/*--> */ /*--> */ 一、异常处理 1 、什么是异常 异常是错误发生的信号,程序一旦出错,如果程序中还没有相应的处理机制,那么该错误就会产生一个异常抛出来,程序的运行也随之终止。 2 、一个异常分为三部分: 1 、异常的追踪信息 2 、异常的类型 3 、异常的值 3 、异常的分类: 1 、语法异常: 这类异常应该在程序执行前就改正 print('start....') x=1 x+=1 if print('stop....') 2 、逻辑上的异常 4 、常见逻辑上的异常 IndexError l=['a','b'] l[100] KeyError d={'a':1} d['b'] AttributeError: class Foo: pass Foo.x import os os.aaa ZeroDivisionError 1 / 0 FileNotFoundError f=open('a.txt','r',encoding='utf-8') ValueError: I/O operation on closed file. f=open('a.txt','r',encoding='utf-8') f.close() f.readline() ValueError: invalid literal for int() with base 10: 'aaaaa' int