10
2019
07

JAVA学习-Java高级-多线程之线程模型与使用

使用new创建线程后,可以通过Thread类的方法来设置线程的各种属性

线程进入阻塞状态:调用sleep方法,等待同步锁,调用了wait方法

终止线程的方法:执行完正常退出、使用stop方法强制退出、使用interrupt方法强制中断退出

Java实现方法,1:通过继承Thread类实现多线程,2:通过实现Runnable接口,再使用Thread实现多线程


package pkg1;
public class ThreadDemo {
public static void main(String[] args) {
System.out.println("———————————————demo 1—————————————————");
MyThread1 t1 = new MyThread1();
t1.setName("t1");// 设置线程名称
MyThread1 t2 = new MyThread1();
t2.setName("t2");// 设置线程名称
t1.start();// 线程启动
t2.start();// 线程启动
try {
t1.join();// 主线程等待新线程完成再继续往下执行
t2.join();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println("demo 1 结束");
System.out.println("———————————————demo 2—————————————————");
MyRunnable1 r1=new MyRunnable1();
MyRunnable1 r2=new MyRunnable1();
Thread t3=new Thread(r1,"r1");
Thread t4=new Thread(r2,"r2");
t3.start();
t4.start();
try {
t3.join();
} catch (InterruptedException e) {
e.printStackTrace();
}
try {
t4.join();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
//继承Thread类,直接启动线程
class MyThread1 extends Thread {
public MyThread1() {}//无参构造函数
public MyThread1(String name) {//有参构造函数,参数为:线程名称
super(name);
}
@Override
public void run() {
for (int i = 0; i < 5; i++) {
System.out.println(this.getName() + " " + i);
}
super.run();
}
}
//类实现Runnable接口,再用Thread线程启动执行
//一般多使用此方式实现多线程,方便实现资源共享(多线程使用同一对象,例如:多窗口卖同一车票)
class MyRunnable1 implements Runnable{
@Override
public void run() {
for (int i = 0; i < 5; i++) {
System.out.println(Thread.currentThread().getName() + " " + i);
}
}
}


18
2019
04

oracle中with语句提高查询效率

需求:SUM统计总数之后再列转行。

查询结果:


原始版本SQL:

select nvl(sum(OVERTIME_REPAIR ),0) CNT,
 '维修超时' CELL from (
 SELECT SUM(CASE
             WHEN ROUND((A.DELIVERY_DATE - A.PRE_GET_DATE) * 24 * 60) > 0 THEN
              1
             ELSE
              0
           END) AS OVERTIME_DELIVERY, /*交车超时*/
       SUM(CASE
             WHEN ROUND((A.DELIVERY_DATE - A.PRE_GET_DATE) * 24 * 60) <= 0 THEN
              1
             ELSE
              0
           END) AS NORMAL_DELIVERY, /*正常交车*/
       SUM(CASE
             WHEN (ROUND((W.CLEAN_FINISH_DATE - W.QUALITY_FINISH_DATE) * 24 * 60) > 20) THEN
              1
             ELSE
              0
           END) OVERTIME_CLEAN, /*洗车超时*/
       SUM(CASE
             WHEN (ROUND((W.QUALITY_FINISH_DATE - A.PRE_GET_DATE) * 24 * 60) > 0) THEN
              1
             ELSE
              0
           END) OVERTIME_CHECK, /*质检超时*/
       SUM(CASE
             WHEN ROUND((W.REPAIR_FINISH_DATE -
                        (SELECT MAX(PLAN_END_DATE)
                            FROM T_TEMP_MY_BU_WORK_ORDER_D WI
                           WHERE WI.REPAIR_ORDER_ID = A.REPAIR_ORDER_ID)) * 24 * 60) > 0 THEN
              1
             ELSE
              0
           END) OVERTIME_REPAIR /*维修超时*/
  FROM T_TEMP_MY_BU_REPAIR_ORDER A
  LEFT JOIN T_TEMP_MY_BU_WORK_ORDER W ON W.REPAIR_ORDER_ID = A.REPAIR_ORDER_ID
  JOIN T_TEMP_MY_ORG_DLR DLR ON DLR.DLR_ID = A.DLR_ID
 WHERE A.IS_ENABLE = '1'
   AND A.BILL_TYPE = '31803'
   AND A.REPAIR_ORDER_STATUS = '31011'
 )
 UNION ALL
select nvl(sum(OVERTIME_CLEAN),0) CNT,
'洗车超时' SELL
from (
 SELECT SUM(CASE
             WHEN ROUND((A.DELIVERY_DATE - A.PRE_GET_DATE) * 24 * 60) > 0 THEN
              1
             ELSE
              0
           END) AS OVERTIME_DELIVERY, /*交车超时*/
       SUM(CASE
             WHEN ROUND((A.DELIVERY_DATE - A.PRE_GET_DATE) * 24 * 60) <= 0 THEN
              1
             ELSE
              0
           END) AS NORMAL_DELIVERY, /*正常交车*/
       SUM(CASE
             WHEN (ROUND((W.CLEAN_FINISH_DATE - W.QUALITY_FINISH_DATE) * 24 * 60) > 20) THEN
              1
             ELSE
              0
           END) OVERTIME_CLEAN, /*洗车超时*/
       SUM(CASE
             WHEN (ROUND((W.QUALITY_FINISH_DATE - A.PRE_GET_DATE) * 24 * 60) > 0) THEN
              1
             ELSE
              0
           END) OVERTIME_CHECK, /*质检超时*/
       SUM(CASE
             WHEN ROUND((W.REPAIR_FINISH_DATE -
                        (SELECT MAX(PLAN_END_DATE)
                            FROM T_TEMP_MY_BU_WORK_ORDER_D WI
                           WHERE WI.REPAIR_ORDER_ID = A.REPAIR_ORDER_ID)) * 24 * 60) > 0 THEN
              1
             ELSE
              0
           END) OVERTIME_REPAIR /*维修超时*/
  FROM T_TEMP_MY_BU_REPAIR_ORDER A
  LEFT JOIN T_TEMP_MY_BU_WORK_ORDER W ON W.REPAIR_ORDER_ID = A.REPAIR_ORDER_ID
  JOIN T_TEMP_MY_ORG_DLR DLR ON DLR.DLR_ID = A.DLR_ID
 WHERE A.IS_ENABLE = '1'
   AND A.BILL_TYPE = '31803'
   AND A.REPAIR_ORDER_STATUS = '31011'
 )
 UNION ALL
select nvl(sum(OVERTIME_CHECK),0) CNT,
'质检超时' SELL
from (
 SELECT SUM(CASE
             WHEN ROUND((A.DELIVERY_DATE - A.PRE_GET_DATE) * 24 * 60) > 0 THEN
              1
             ELSE
              0
           END) AS OVERTIME_DELIVERY, /*交车超时*/
       SUM(CASE
             WHEN ROUND((A.DELIVERY_DATE - A.PRE_GET_DATE) * 24 * 60) <= 0 THEN
              1
             ELSE
              0
           END) AS NORMAL_DELIVERY, /*正常交车*/
       SUM(CASE
             WHEN (ROUND((W.CLEAN_FINISH_DATE - W.QUALITY_FINISH_DATE) * 24 * 60) > 20) THEN
              1
             ELSE
              0
           END) OVERTIME_CLEAN, /*洗车超时*/
       SUM(CASE
             WHEN (ROUND((W.QUALITY_FINISH_DATE - A.PRE_GET_DATE) * 24 * 60) > 0) THEN
              1
             ELSE
              0
           END) OVERTIME_CHECK, /*质检超时*/
       SUM(CASE
             WHEN ROUND((W.REPAIR_FINISH_DATE -
                        (SELECT MAX(PLAN_END_DATE)
                            FROM T_TEMP_MY_BU_WORK_ORDER_D WI
                           WHERE WI.REPAIR_ORDER_ID = A.REPAIR_ORDER_ID)) * 24 * 60) > 0 THEN
              1
             ELSE
              0
           END) OVERTIME_REPAIR /*维修超时*/
  FROM T_TEMP_MY_BU_REPAIR_ORDER A
  LEFT JOIN T_TEMP_MY_BU_WORK_ORDER W ON W.REPAIR_ORDER_ID = A.REPAIR_ORDER_ID
  JOIN T_TEMP_MY_ORG_DLR DLR ON DLR.DLR_ID = A.DLR_ID
 WHERE A.IS_ENABLE = '1'
   AND A.BILL_TYPE = '31803'
   AND A.REPAIR_ORDER_STATUS = '31011'
 )


11
2019
04

oracle中join右表最多只取一条指定的数据

一般情况下,如果类型这种:

       select * from A
       left join B 
       ON A.con_id=B.con_id;

假设A中有1条数据,B中与A关联的数据有2条或以上,查出的结果是有2条或以上,有些情况我们需要以A表为准,B表只查想要的一条记录

13
2019
03

JAVA学习-Java高级-Java反射机制

Java高级-Java反射机制

1.反射概述

什么是反射?

反射的概念是由Smith在1982年首次提出的,主要是指程序可以访问、检测和修改它本身状态或行为的一种能力。

Java反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法;这种动态获取的信息以及动态调用对象方法的功能称为Java语言的反射机制。

06
2019
01

oracle11g安装配置

之前有安装oracle11g,但都是装好了不会用,今天试了下能安装成功、配置好、然后可以用客户端连接使用,这里肯定要查很多的相关资料,不然也弄不好。

下面简单记录一步骤:

1、下载

下载文件一共有两部分:

https://download.oracle.com/otn/nt/oracle11g/112010/win64_11gR2_database_1of2.zip

05
2019
01

Outlook 2013客户端设置邮件到达显示桌面提示

背景:

公司换邮件服务器之后,收到邮件后桌面没有弹出提醒了,有时候半天或者一天没看邮件,在没提醒的情况下,很多重要的信息错过了或者处理不及时,比如会议预约邮件、禅道提醒邮件、JIRA提醒邮件等等,摸索了一段时间终于把邮件到达桌面提醒重新弄出来了,下面分享一下设置步骤,挺简单。


1、管理规则和通知

04
2019
01

oracle-存储过程生成Java的entity类代码

查询Oracle表的字段SQL如下:

select 

        ut.TABLE_NAME,--表名称

        ut.COLUMN_NAME,--字段名称

        uc.comments,--字段注释

        ut.DATA_TYPE,--字典类型

23
2018
12

JAVA学习-Java高级-GUI之AWT事件的基本概念、事件处理

Java高级-GUI之AWT事件处理

AWT事件的处理过程中,主要涉及3类对象:

Event(事件):用户对组件的一个操作,称之为一个事件,以类的形式出现,例如键盘操作对应的事件类是KeyEvent。事件实例在该事件发生时由系统自动产生。每一种事件都对应专门的监听者。

Event Source(事件源):事件发生的场所,通常就是各个组件本身,例如按钮Button。

23
2018
12

JAVA学习-Java高级-GUI之布局管理器

Java高级-GUI之布局管理器

容器内可以存放各种组件,而组件的位置和大小都是由容器内的布局管理器来决定的。在AWT中为我们提供了以下5种布局管理器:

FlowLayout 流式布局管理器

BorderLayout 边界布局管理器

20
2018
12

JAVA学习-Java高级-GUI之AWT框架和容器

Java高级-GUI之AWT框架和容器

GUI概述:GUI(Graphical User Interface)图形化用户界面。用户和程序之间可以通过GUI能方便友好地进行交互。在Java语言中,JFC(Java Foundation Classed)是开发GUI的API集,它主要包含以下几个部分。

AWT(Abstract Window Toolkit)抽象窗口工具包:Java开发用户界面最初的工具包,是建立JFC的主要基础;