多线程

进程与线程区别: 进程需要分配独立的内存空间;线程在同一内存空间中工作,可以共享同一块内存和系统资源

与Java相关的API:

  1)Thread类

    方法:start()启动; urn() ; getName()获取线名;    setName()改变线名;   setPriority()设置优先级;   setDaemon()守护线程;   join()等待;   interupt()中段本线程;

         isAlive()判断运行是否仍在生命周期之中;   yield()静态,停止线程运行;

  2)Runnable类(公共规范)

   3)Object类

    方法:wait()等待;  notify()唤醒线程;  notifyAll()唤醒所有线程

线程的创建:

  1)继承Thread类

    步骤:A、创建一个继承Thread类的类

         B、在子类中重写run()方法,写自己想要运行的代码

         C、创建Thread类的实例

         D、调用实例上的start()方法,开始运行线程

  2)实现Runnable接口

    步骤:A、创建一个类实现Runnable接口

         B、在Runnable指定的run()方法内,写自己想要运行的代码

       C、创建Runnable类的实例

       D、创建一个Thread对象,将Runnable的实例作为构造器参数传进去

       E、调用Thread类的实例的start()方法

线程优先级介于:1——10之间;线程运行顺序是由优先级决定;setPriority()设置线程优先级,getPriority()取得线程优先级

线程同步(互斥):

  作用:给所在对象加锁(监视器),就是当这个线程启动时别的线程无法使用

  同步块格式:Synchronized(取得锁的对象){//要锁定的代码}

死锁:释放之后都无法运行,需要考虑优先顺序释放的

线程的生命周期:

    Java的线程会因为实例化而产生,也可能因为run()程序运行完成后而结束,线程在运行的过程之中也可能会休眠(sleep),让出(yield),也可能必须等待其他的线程

    处于Runnable状态的线程会因为优先权的不同,而又JVM决定该进入Runing状态,同时的线程也会因为自行调用yield()方法而重新回到Runnable状态。处于Runing状态也会因调用了sleep()方法

    而进入阻塞(blocked)的状态,一直等到线程的休眠结束后而重新回到Runnable的状态,处于Rining状态的线程也可能因为再启动其他的线程,但却由于另一个线程调用了join()方法而必须进入阻塞

    的状态,原线程会一直等到所启动的线程运行完毕后,原线程才会再进入Runnable状态,并等待取得运行权

修正线程的状态图:

  第一次:线程有可能因为无法取得某个对象的对象锁而无法处于Runing的状态,此程让线程会由 Runing的状态被丢到该对象的锁池中并等待取得该对象锁,如果该对象锁已经被释放了,则在锁池中的某个线程会进入Runnable状态等待运行,如果取得对象锁的线程在等待运行的期间对象锁又被另一个线程取得,则原来的线程又会无法运行

     

  第二次:

  

Java    I/O系统

I:是Input为输入; O:是output为输出

流(是 I/O的抽象和基础

  分类:1)按方向分:

            输入流:从数据源读取数据到程序

            输出流:将数据从程序写入数据的目的地

        2)按单位分:

            字节流:内存变量类型为byte()

 1 package com.lovo;
2
3 import java.io.File;
4 import java.io.FileInputStream;
5 import java.io.FileNotFoundException;
6 import java.io.FileOutputStream;
7 import java.io.IOException;
8 import java.io.InputStream;
9 import java.io.OutputStream;
10
11 /**
12 * 字节输入输出流测试
13 *
14 * @author 小明
15 *
16 */
17 public class IOTest {
18
19 public static void main(String[] args) {
20 StringBuffer buffer = new StringBuffer(); // 字符串缓冲
21
22 /* 输入流 */
23 InputStream in = null;
24
25 try {
26 // 1. 打开输入流
27 in = new FileInputStream("E:\\jg\\exercise.txt");
28 // 2. 读取
29 // byte[] b = new byte[128];
30 byte[] b = new byte[1024 * 4];
31 int len = in.read(b); // 返回读取到的字节数,返回-1表示读取到流结尾
32 while(len != -1){
33 buffer.append(new String(b, 0, len)); // 将读取到的字节解析为String追加到缓冲
34 len = in.read(b);
35 }
36 // System.out.println("读到" + len + "字节的数据");
37 System.out.println(buffer.toString());
38 } catch (FileNotFoundException e) {
39 e.printStackTrace();
40 } catch (IOException e) {
41 e.printStackTrace();
42 } finally {
43 // 3. 释放资源,关闭输入流
44 if (in != null){
45 try {
46 in.close();
47 } catch (IOException e) {
48 e.printStackTrace();
49 }
50 }
51 }
52
53 /* 输出流 */
54 OutputStream out = null;
55
56 try {
57 File file = new File("D:\\test\\demo\\test.txt");
58 if (!file.getParentFile().exists()){ // 文件路径不存在,则创建路径中所有不存在的目录
59 file.getParentFile().mkdirs();
60 }
61 // 1. 打开输出流
62 out = new FileOutputStream(file);
63 // 2. 写
64 out.write(buffer.toString().getBytes());
65 } catch (FileNotFoundException e) {
66 e.printStackTrace();
67 } catch (IOException e) {
68 e.printStackTrace();
69 } finally {
70 // 3. 释放输出流资源
71 if (out != null){
72 try {
73 out.flush();
74 out.close();
75 } catch (IOException e) {
76 e.printStackTrace();
77 }
78 }
79 }
80 }
81 }

      字符流:内存变量类型是char();

 1 package com.lovo;
2
3 import java.io.FileNotFoundException;
4 import java.io.FileReader;
5 import java.io.FileWriter;
6 import java.io.IOException;
7 import java.io.Reader;
8 import java.io.Writer;
9
10 /**
11 * 字符输入输出流测试
12 *
13 * @author 小明
14 *
15 */
16 public class IOTest2 {
17
18 public static void main(String[] args) {
19 StringBuffer buffer = new StringBuffer();
20
21 /* 输入流 */
22 Reader reader = null;
23
24 try {
25 // 1. 打开流
26 reader = new FileReader("E:\\jg\\exercise.txt");
27 // 2. 读取
28 char[] ch = new char[128]; // 缓冲区
29 int len;
30 do {
31 len = reader.read(ch);
32 if (len == -1)
33 break;
34 buffer.append(new String(ch, 0, len));
35 } while (len != -1);
36 System.out.println(buffer.toString());
37 } catch (FileNotFoundException e) {
38 e.printStackTrace();
39 } catch (IOException e) {
40 e.printStackTrace();
41 } finally {
42 // 3. 释放资源
43 if (reader != null) {
44 try {
45 reader.close();
46 } catch (IOException e) {
47 e.printStackTrace();
48 }
49 }
50 }
51
52 /* 输出流 */
53
54 Writer writer = null;
55
56 try {
57 // 1. 打开流
58 writer = new FileWriter("d:\\test.txt");
59 // 2. 写入
60 writer.write(buffer.toString());
61 } catch (IOException e) {
62 e.printStackTrace();
63 } finally {
64 // 3. 释放资源
65 if (writer != null) {
66 try {
67 writer.flush();
68 writer.close();
69 } catch (IOException e) {
70 e.printStackTrace();
71 }
72 }
73 }
74 }
75 }

文件类:

  File类:提供了管理磁盘文件和目录的基本功能,File对象代表一个文件或目录的名称和位置的字符串

 1 package com.lovo;
2
3 import java.io.File;
4 import java.io.FileInputStream;
5 import java.io.FileNotFoundException;
6 import java.io.FileOutputStream;
7 import java.io.IOException;
8 import java.io.InputStream;
9 import java.io.OutputStream;
10
11 /**
12 * 字节输入输出流测试
13 *
14 * @author 小明
15 *
16 */
17 public class IOTest {
18
19 public static void main(String[] args) {
20 StringBuffer buffer = new StringBuffer(); // 字符串缓冲
21
22 /* 输入流 */
23 InputStream in = null;
24
25 try {
26 // 1. 打开输入流
27 in = new FileInputStream("E:\\jg\\exercise.txt");
28 // 2. 读取
29 // byte[] b = new byte[128];
30 byte[] b = new byte[1024 * 4];
31 int len = in.read(b); // 返回读取到的字节数,返回-1表示读取到流结尾
32 while(len != -1){
33 buffer.append(new String(b, 0, len)); // 将读取到的字节解析为String追加到缓冲
34 len = in.read(b);
35 }
36 // System.out.println("读到" + len + "字节的数据");
37 System.out.println(buffer.toString());
38 } catch (FileNotFoundException e) {
39 e.printStackTrace();
40 } catch (IOException e) {
41 e.printStackTrace();
42 } finally {
43 // 3. 释放资源,关闭输入流
44 if (in != null){
45 try {
46 in.close();
47 } catch (IOException e) {
48 e.printStackTrace();
49 }
50 }
51 }
52
53 /* 输出流 */
54 OutputStream out = null;
55
56 try {
57 File file = new File("D:\\test\\demo\\test.txt");
58 if (!file.getParentFile().exists()){ // 文件路径不存在,则创建路径中所有不存在的目录
59 file.getParentFile().mkdirs();
60 }
61 // 1. 打开输出流
62 out = new FileOutputStream(file);
63 // 2. 写
64 out.write(buffer.toString().getBytes());
65 } catch (FileNotFoundException e) {
66 e.printStackTrace();
67 } catch (IOException e) {
68 e.printStackTrace();
69 } finally {
70 // 3. 释放输出流资源
71 if (out != null){
72 try {
73 out.flush();
74 out.close();
75 } catch (IOException e) {
76 e.printStackTrace();
77 }
78 }
79 }
80 }
81 }

高级字节流分类:

  1)过滤流:(都是FileInputStream和FileOutputStream的子类)

    分类:缓冲流:BufferedFileInputStream和BufferedOutputStream

       数据流:DateInputStream和DateOutputStream

         计数:LineNumberInputStream(表明正在读取哪一行)

       推回数据流:PushbackInputStream

         打印数据流:PrintStream(带刷新功能)

   2)对象流:ObjectInputStream和ObjectOutputStream

   3)合并:sequenceInputStream

高级字符流:

  1)缓冲流:BufferedReader和BufferedWriter

  2)转换流:InputStreamReader和OutputStreamWriter(字节-字符)

  3)打印输出流:PrintWriter

对象流:

  序列化:ObjectInputStream(保存内存中对象的“全景图”)为了实现对象序列化,对应的类必须实现java.io.Serializable接口

  反序列化:ObjectOutputStream

  属性加上一个transient修饰符,其职不被序列化

Java图形用户界面编程

AWT:抽象窗口工具箱,保证平台独立性,但严重依赖下层操作系统——重量组件

Swing:具有更好的平台无关性和可移植性——轻量组件。

组件三要素:(内容)、(外观显示)、(行为) 

组件三个部分:模型 、视图、控制器

  认识几个方法

    add( ):将组件添加到该容器中。

     removeAll() :移掉容器中的全部组件。

     remove(Component c) 移掉容器中参数指定的组件。

     validate():每当容器添加新的组件或移掉组件时,调用该方法以保证容器中的组件能正确显示出来。

重量级容器:JFram(窗体)、JDialog(对话框)、JWindow(窗口)、JApplet(小程序),继承自Container容器类

Swing菜单:

 1 /**
2 * 添加菜单
3 */
4 public void addMenu() {
5 // 菜单条
6 JMenuBar jMenuBar = new JMenuBar();
7 // 将菜单条加入到当前窗体
8 this.setJMenuBar(jMenuBar);
9
10 // 菜单
11 JMenu file = new JMenu("文件");
12 jMenuBar.add(file);
13
14 // 子菜单
15 JMenu newFile = new JMenu("新建");
16 newFile.add("Java项目");
17 newFile.add(".Net项目");
18 file.add(newFile);
19
20 // 子菜单项
21 JMenuItem open = new JMenuItem("打开...");
22 file.add(open);
23 file.add("保存");
24 file.add("另存为");
25
26 // 获取“保存”菜单项
27 JMenuItem save = file.getItem(2);
28 save.setEnabled(false); // 禁用
29
30 // 为"打开"菜单项添加快捷键
31 open.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_O,
32 InputEvent.CTRL_MASK));
33 }

布局:

  1)流式布局管理器:FlowLayout

  2)边框布局管理器:BorderLayout

  3)网格布局管理器:Griflayout(可传递两个或四个或无参数)

  4)盒式布局管理器:Boxlayout

 1 /**
2 * 添加按钮
3 */
4 public void addButton() {
5
6 // 单行文本框
7 JTextField text = new JTextField("请输入文本");
8 this.add(text, BorderLayout.NORTH);
9
10 /* 默认边界布局管理器 */
11 // 按钮
12 JButton west = new JButton("West");
13 JButton east = new JButton("East");
14 JButton north = new JButton("North");
15 JButton south = new JButton("South");
16 JButton center = new JButton("Center");
17 // // 添加按钮
18 // this.add(west, BorderLayout.WEST);
19 // this.add(east, BorderLayout.EAST);
20 // this.add(north, BorderLayout.NORTH);
21 // this.add(south, BorderLayout.SOUTH);
22 // this.getContentPane().add(center, BorderLayout.CENTER);
23
24 // 创建面板对象
25 JPanel pnl = new JPanel();
26
27 /* 网格布局管理器 */
28 GridLayout layout = new GridLayout(3, 2, 10, 10);
29 // this.setLayout(layout);
30
31 // this.add(west);
32 // this.add(east);
33 // this.add(north);
34 // this.add(south);
35 // this.add(center);
36
37 pnl.setLayout(layout);
38 pnl.add(west);
39 pnl.add(east);
40 pnl.add(north);
41 pnl.add(south);
42 pnl.add(center);
43
44 this.add(pnl, BorderLayout.CENTER);

文本框和口令框:

  JTextField t=new JTextField() ;

  JPassworField j=new JPassworField ();

布局管理让容器使用方法setLayout(布局对象)来设计自己的布局

事件和事件源:

  点击按钮:JButton      文本框中按回车键:JTexFiled       选中一个新条目:JComboBox         选中条目:JList      点击检查框:JCeckBox

  点击单选按钮:JRadioButton         选中菜单栏:JMenuTtem           移动滚动条:JScroIIBar、JSlider          关于窗口动作:Window

  鼠标动作:Component      移动或拖拽:Component       键按下或释放:Component      组件添加或删除:Container          组件移动、恢复、隐藏、显示:Component

事件监听器、注册和处理事件:

  使用事件委托模型来处理事件,事件源触发一个事件,但是事件源本身并不处理该事件,而是委托给该事件有兴趣的对象来处理,其对象称为事件监听器

  需做:1)创建一个监听器对象,必须对应事件监听器的接口实例(某个类型的事件XxxEvent,对应接口为XxxListener)

     2)将监听器对象注册到事件源上(对于XxxEvet注册为addXxxListener)

定义监听器类:

  1)将监听器定义在单独的类中

  2)让CUI程序本身实现监听器接口

  3)使用内部类定义监听器

  4)使用匿名内部类定义监听器。

I/O系统,多线程、图形用户界面编程的更多相关文章

  1. Java图形用户界面编程

    1.Java图形用户界面编程概述 JavaAPI中提供了两套组件用于支持编写图形用户界面:AWT(抽象窗口包)和Swing 2.  容器(Container):重量级容器和轻量级容器(一个容器可以放置 ...

  2. 多线程编程、java图形用户界面编程、Java I / O系统

    线程概述 进程:是一种 “自包容”的运行程序 线程是进程当中的一个概念,最小处理单位 THread类.Runnable接口.Object类 创建新执行线程有两种方法:1:一种方法是将类声明为Threa ...

  3. 19 图形用户界面编程 - 《Python 核心编程》

  4. java11 - GUI图形用户界面编程

    一.JavaSwing界面设计参考教程 二.布局管理器 三.绝对布局 import java.awt.Color; import java.awt.event.ActionEvent; import ...

  5. 图形用户界面入门:EasyGui - 零基础入门学习Python035

    图形用户界面入门:EasyGui 让编程改变世界 Change the world by program 今天我们来谈谈图形用户界面编程,也就是我们常说的GUI(Graphical User Inte ...

  6. 抽象窗口工具包AWT (Abstract Window Toolkit) 是 API为Java 程序提供的建立 图形用户界面

    抽象窗口工具包AWT (Abstract Window Toolkit) 是 API为Java 程序提供的建立 图形用户界面GUI (Graphics User Interface)工具集,AWT可用 ...

  7. 以Tkinter模块来学习Python实现GUI(图形用户界面)编程

    tk是什么:它是一个图形库,支持多个操作系统,使用tcl语言开发的.tkinter是Python内置的模块, 与tk类似的第三方图形库(GUI库)还有很多,比如:Qt,GTK,wxWidget,wxP ...

  8. linux系统中firewalld防火墙管理工具firewall-config(GUI图形用户界面)

    firewall-config是firewalld防火墙管理工具的GUI(图形用户界面)版本,几乎可以实现所有以命令行来执行的操作. firewall-config的界面如下图(在终端直接运行fire ...

  9. java第八节 GUI/图形用户界面

    /* *第8讲 GUI/图形用户界面 * AWT的基础知识 * GUI全称是Graphical User Interface,即图形用户界面 * JDK中提供了AWT和Swing两个包,用于GUI程序 ...

随机推荐

  1. SQL中CONVERT()转化函数的用法 字符串转日期

    SELECT CONVERT(varchar(), GETDATE(), ): :57AM SELECT CONVERT(varchar(), GETDATE(), ): // SELECT CONV ...

  2. [转]将Word转(保存)为带书签的PDF

    提到的方法非常管用,感谢原作者的分享. 原文地址:http://blog.163.com/rongting_chen/blog/static/16490684420114266192887/ 将wor ...

  3. C4.5决策树算法概念学习

    数据挖掘一般是指从大量的数据中自动搜索隐藏于其中的有着特殊关系性的信息的过程. •分类和聚类 •分类(Classification)就是按照某种标准给对象贴标签,再根据标签来区分归类,类别数不变. • ...

  4. Studio--代理设置(SDK下载代理设置)

    为啥Android Studio有代理一说呢.比如我们要下载某个插件,但是这个插件又被tc墙了,所以这个时候需要FQ才能安装.FQ其中的一种方式就是使用VPN,配置如下图: 输入VPN的IP和PORT ...

  5. Laravel5.0 CSRFチェックを無効化(修改后可以像5.1以上那样从CSRF保护中排除指定URL)

    Laravel5では全てのPOSTに勝手にCSRFチェックが付いてきます.便利と言えば便利ですが.Laravel外からのPOSTを受け取りたいときなど大迷惑です. CSRFチェックを排除する方法が何故 ...

  6. this web application instance has been stopped already解决办法

    重启tomcat的时候出错 Illegal access: this web application instance has been stopped already.  Could not loa ...

  7. Gerrit清单库配置(转载)

    From:http://fatalove.iteye.com/blog/1340334 gerrit清单库是用来配合repo使用的.清单库中列出了gerrit服务器上的其他版本库. 客户端通过repo ...

  8. maven项目导入eclipse

    maven项目的配置文件 web java文件都在src下面 src/main/java src/main/webapp src/main/webapp/web-inf 导入后要重新添加jar包,设置 ...

  9. [ActionScript 3.0] AS3 双A字模型

    package { import caurina.transitions.Tweener; import flash.display.Sprite; import flash.events.Mouse ...

  10. lucene-源码分析

    lucene-源码分析 http://www.cnblogs.com/forfuture1978/p/3940965.html