1、Thread中的start()方法的功能就是创建一个新的线程,并自动调用该线程的run()方法,直接调用run()方法是不会创建一个新的线程的;
2、执行一个线程实际就是执行该线程run方法中的代码;
3、执行完aa.start();后并不表示aa所对应的线程就一定会立即得到执行,aa.start();执行完后只是表示aa线程具有了可以立即被cpu执行的资格,但是由于想抢占cpu执行的线程很多,cpu并不一定会立即去执行aa所对应的线程。
4、一个Thread对象能且只能代表一个线程,一个Thread对象不能调用两次start()方法,否则会抛出java.lang.lllegalThreadStateException异常
创建线程的方法二:实现Runnable接口
Class A implements Runnable{}//使类A具有了run() A aa=new A();
Thread t=new Thread(aa);//创建一个线程,将aa作为运行对象 T.start();
Thread的常用方法:
Public final void setName()//设置当前线程的名字
Public static Thread currentThread()//返回当前正在执行的线程对象的引用 Public final String getName()//返回当前线程的名字
线程的状态切换:
线程控制:
线程控制的基本方法:
isAlive() 判断线程是否还活着 getPriority() 获取优先级 Thread.sleep() 线程休眠
Join() 等待另一个线程运行完自己再运行(一个线程用到另一个线程的结果)线程的串行化 Yield() 线程让步,让出CPU,当前线程进入就绪队列 Wait() 线程等待
Notify()/NotifyAll() 唤醒一个/所有线程
优先级(1-10 小-大,默认5)
线程的休眠:
线程的挂起和恢复 线程的结束
线程的同步: 卖票(本质就是多个线程访问一个资源,线程同步就是保证资源多个线程处理资源过程中不出现错误)
问题:线程没处理完,语句没有执行完,就切换到另外一个线程, If(票数大于0)//必须只有一个线程访问 {
买一张票; 票数减一; }
ABC三个售票点;
Synchronized(str){} //Synchronized同步 修饰一个方法---霸占正在调用该方法的对象 修饰一个方法内部的某个代码块
引入Synchronized的目的就是让售票代码和--tickets;代码,能要么都执行要么都不执行;
生产和消费(本质就是多个线程共享一个数据,若线程不同步就会出现问题;TestPC.java)
SynStack
资源 Producer(生产者) Consumer(消费者)
Push();
Pop();
【注意】一个类一旦继承Thread类或者实现Runnable接口,都不能把异常抛给调用者,因为Runnable接口中没有这样的声明
容器/集合:
Collection的介绍 --Collection中的方法介绍 List Set的区别
重写toString方法的必要性
实现Collection接口都要进行重写toString方法 Collections类的使用(注意区别Collection接口)
为实现Collection接口的类提供随机排列等方法,接口中并没有这些方法
Comparable接口--解决一个类存在多个属性,List中排序时,选择哪一个作为排序标准 只有一个compareTo();方法
【注意】不用自己调用,Collections类会自动调用该方法
Set接口
集合内部是以哈希表为存储结构的,对比List Set TreeSet类 HashSet类
要保证集合无重复需要重写equals()方法和hashCode()方法
系统默认的Equals()只要是不同内存 (相同内容)就返回false,我们要达到的目的是内存不同,内容相同也返回True
SUN公司已有的类Integer等类,已经在内部重写了Equals()和hashCode()方法 [, toString(),]?
什么类需要重写Equals()和hashCode()方法---只有hashSet类
为什么需要重写Equals()和hashCode()方法?
hashCode()方法 近似于对象内存地址的十六进制表示 哈希码 对象aa
图、HashSet内部实现
TreeSet 它的内部是一种树的存储结构,放进去已经自动排序了,且没有重复的 所以必须要重写comparable接口
Iterator 接口
数组、链表、树
hasNext() 是否存在下一个元素 Next() 移动到下一个元素 Remove() 一般不使用
GUI(图形化用户界面)
(提示:java的优点在于跨平台,GUI并不是java的强项,也不是重点,在真正实际的应
用中很少用java写界面)
组件(component):如菜单、按钮、标签等 Java.awt.component所有组件的父类
容器:有一种特殊的组件专门用来包含其他的组件 Java..awt.container 所有容器的父类
Frame常用的方法 Panel
不能单独存在必须添加到其他容器中 布局管理器
每一个容器都有一个默认的布局管理器,如果要自己设置组件的位置需要setLayout(null) Frame默认 BorderLayout 东西南北中的排列
Panel 默认 FlowLayout 流式布局 new FlowLayout(FlowLayoout.RIGHT,20,40) GridLayout 格子排列
几种布局形式:
BorderLayout 东西南北中的排列 默认中间,每个区域只能放一个 FlowLayout 流式布局 GridLayout 格子排列
网络编程
端口号:一台计算机从网卡接受过来的数据到底应该交给本地的哪个网络程序来处理的,这是由端口号来决定的
端口的范围:0-1024-65535
协议: TCP UDP
基于UDP的socket编程: Import java.net.*;
DatagramSocket(5678) DatagramPacket
基于TCP的socket编程:
【我的编程心得】
关于学习编程语言一些心得:基础需要耐心的学习,但学习编程的重点在于多写代码,多应用,这样才会有更多的独立思考,发现问题解决问题,巩固提高,不用过多的纠结于基础知识和语法
百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库《郝斌开发经验(java)》(3)在线全文阅读。
相关推荐: