java step1:基础知识4

1.awt中关闭Frame窗口事件:

addWindowListener(new WindowAdapter(){   //关闭事件处理
                public void windowClosing(WindowEvent e){
                    setVisible(false);
                    System.exit(0);  //程序关闭
                }
            });

2.流对数据提供了顺序存取,这对于网络应用特别有用,因为网络应用通常都是面向流的。存储在硬盘(而不是流式磁带机)上的文件无需顺序存储,Java提供了一个RandomAccessFile类可以随机存取文件。

3.线程是独立于其他线程运行的程序执行单元。Java程序可能包括多个执行线程,即使主机实际上只有一个单CPU,这些线程也会表现得好像在独立的(多个)CPU上运行一样。

(1)java.lang.Runnable接口定义了一个run()方法,作为线程执行的代码块。此方法退出时,线程即停止运行。

(2)java.lang.Thread类表示一个线程;它为设置和查询线程特性(如执行优先级)以及开始一个线程的执行分别定义了方法。

(3)synchronized语句和修饰符可用于写一些特殊的代码块或完整方法,在执行这些代码块或方法之前要求线程得到一个锁。这种机制可以确保两个线程不会同时运行代码块或方法,从而避免不同线程将共享数据置于不一致状态。

(4)java.lang.Object的wait()和notify()方法可用于挂起线程以及再次将其唤醒。

(5)Thread.yield()  //每个线程运行一段后为其他进程提供一个运行机会,这样使得优先级相同的其他进程不会“饿死”

例1:展示了如何定义、操纵和运行线程的简单程序

4.如果多个线程可以同时改变一个对象的状态,通常必须使用synchronized方法或synchronized语句,以确保一次只有一个线程修改对象的状态。如果未能做到,两个线程最终就会覆盖对方所做的编辑,而致使对象处于不一致的状态。

同步也会带来问题,当两个或多个线程都在等待获得锁,而锁目前正由另外某个正在等待的线程所拥有,此时就出现了死锁。要避免死锁,可以要求所有线程都按同样的顺序获得其所需的所有锁。

例2:演示了编写多线程程序的错误做法,此程序故意在两个线程间制造了死锁。

5.设计一个可能用于并发程序的类,这样一个类的实例可能同时由多个线程使用,此时,一定要确保此类事线性安全的。保证线程安全的方法之一:避免多个线程并发访问一个实例的内部状态。因为java设计本身就融入了线程,因此java语言提供了synchronized修饰符,其作用就是保证不会由多个线程并发访问一个实例的内部状态。一个实例方法声明为synchonized时,一个线程在调用此方法之前必须得到该实例的一个锁。如果其锁已经被另外一个线程所拥有,那么前一个线程就要阻塞,直到可以得到其需要的锁为止。这样可以确保一次只有一个线程可以调用实例的任何同步方法。

例3:

时间: 2024-12-30 06:43:46

java step1:基础知识4的相关文章

java step1:基础知识2

1.类方法声明为静态(static);它们在类本身上操作,而不是在类的单个实例上操作. 2.类的字段也可声明为静态,这就使得这些字段成为类字段而非实例字段.对于每个实例字段,每个对象都有其自己的副本,而类字段只有一个副本,此副本要由类的所有实例所共享. 静态方法或类方法(一个意思),静态方法是使用公共内存空间的,就是说所有对象都可以直接引用,不需要创建对象再使用该方法.另一种方法为实例方法. 3.一个类继承自另一个类,则称为后者的一个子类.Java中的类构成了一个类层次结构.java.lang.

java step1:基础知识3

1.java中,I/O是利用java.io包中的类和接口实现的.File是java.io包中最常用的类之一,它表示的是一个文件名(或目录名).尽管File类提供一些方法来处理相应目录内的目录和文件,但是没有提供任何方法处理文件内容.也就是说,它没有提供任何途径来读写文件中包含的字节或字符. 2.java中,顺序文件I/O是通过流抽象完成的(随机存取文件I/O用RandomAccessFile类完成,但顺序I/O更为常见). 3.在eclipse中给main()函数的args参数赋值: 选中项目主

java step1:基础知识1

1.String[] args args[i].charAt(j) : 表示这个表达式将从第i个命令行参数中抽出第j个字符. 2.ArrayList对象 ArrayList与数组相似,但ArrayList可以扩展为任意大小.  (在java.util包中) 创建ArrayList:ArrayList table=new ArrayList(); 添加元素:table.add(...); 3.计算大阶乘 20!是64位整数所能容纳的最大阶乘 java.math.BigInteger类表示任意的大整

黑马程序员——Java集合基础知识之Map

Map概念 要同时存储两个元素Key和Value,他们之间有映射关系,每个键不能重复,每个键只能映射到一个值. 当数据之间存在映射关系的时候,考虑使用Map集合. Map常用方法 如果添加的键原来有值,后添加的值会覆盖前面的值,并返回之前的值.put会返回来先添加的值,后添加的值会覆盖原有的值. Map tm =new TreeMap(); tm.put (key, value);//MAP没有add tm.remove (key) ;//去除一个key和对应的value,若不存在key返回nu

黑马程序员——Java集合基础知识之Collection

集合基础知识--Collection Java中集合框架由常用的Collection接口和Map接口组成,而Collection接口又有两个子接口,是List接口和Set接口,常用的集合框架由这三个类组成. List接口的功能方法 List的使用最为简单,创建集合,通过add方法添加元素,get方法获取元素,通过迭代器获取元素.List接口存放的数据无序的,添加速度快,但是查询速度慢,因为查询的时候必须遍历,每次都重头开始,效率较低.常用实现类有ArrayList,LinkedList. Lis

什么才是java的基础知识?

近日里,很多人邀请我回答各种j2ee开发的初级问题,我无一都强调java初学者要先扎实自己的基础知识,那什么才是java的基础知识?又怎么样才算掌握了java的基础知识呢?这个问题还真值得仔细思考. 我做j2ee开发已经超过十载,作为过来人,心路历程估计和大家差不多.编码的前几年,很长一段时间觉得java简单,开发实现各种功能都很轻松,代码写起来根本不费劲(主要是因为写的代码都是一些功能业务逻辑).但同时自己心里明白,自己其实没有什么水平,自己这3,4年以来学懂的东西就那么多,其他人几个月就可以

java多线程基础知识

1.ThrTest.java 继承Thread类方式 public class ThrTest extends Thread { private String name; public ThrTest() { } public ThrTest(String name) { this.name = name; } public void run() { for (int i = 0; i < 5; i++) { System.out.println(name + "运行 " + i

黑马程序员——java多线程基础知识1

多线程 进程是一个正在执行的程序. cpu在同时执行这些程序,其实是跳跃式的,做快速的切换,时间很短.一个进程可能存在多条路径.迅雷的多路径.每一个进行执行都有一个执行顺序,该顺序是一个执行路径,或这叫一个控制单元.每一个进程至少有一个线程,线程就是进程中的一个独立的控制单元,线程控制进程的执行.jvm启动的时候会有一个进程就叫做java,exe,该进程中至少有一个线程在控制Java程序的执行 ,而且该线程的执行代码在 主函数中.该线程称为主线程.虚拟机至少也有两个线程,一个主线程执行,另一个负

黑马程序员——Java多线程基础知识2

多线程协同 线程间的通讯:我们对资源的操作动作不同,比如说两个卡车一个拉煤一个装煤.但是他们共享了一个资源. 怎么样把这个资源拿出来?怎样把车装满?这个资源当然是一个类,他里面的组成元素就是对象!!现在我们就要有操作对象的思想了,我用对象把这车装满,现在一车装一个对象. 等待唤醒机制: 用的不是sleep是wait.flag标记,这是两人沟通的方式.其实每个标记就要做一次等待或者notify,判断wait,改值notify.线程池.notify唤醒里面的线程,按顺序唤醒.wait和notify必