`
gxhslcww
  • 浏览: 76980 次
  • 性别: Icon_minigender_1
  • 来自: 南通
社区版块
存档分类
最新评论
阅读更多
8月17日
多线程, java.lang;
进程:
线程:一个进程多个任务,称为多线程
如何实现多线程?
1 继承java.lang的Thread类,并且覆盖Thread的public void  run( )方法
run( )方法的作用:
将需要执行的任务编写到run( )方法中
Thread类实现了Runnable接口
ThreadTest.java
实现多线程的步骤:
1 自定义类继承于Thread,并且覆盖run( )方法
  class Xxx extends Thread
{
public void run( )
{

}
}
2 在主线程中实例化线程,并且调用start( )
  public static void main (String args[ ])
  {
Xxx t = new Xxx( );
t.start( );
}
线程的运行机制-----1个CPU:
CPU在一个时间只可以运行一个线程
CPU会运行这个线程一个时间片,然后再运行下一个线程
在CPU的世界里,没有线程,只要是运行的任务,当成一个进程对待
练习:
ThreadTest1.java
实现三个线程式,分别打印自己的名字
第二种实现多线程的方法:
1 class xxx implements Runnable
{
public void run( )
{
}
}
2 xxx x = new xxx( );
Thread t = new Thread( x);
t.start( );
RunnableTest.java
多线程的简写方式:
RunnableTest1.java
多线程实现:
1 多个线程完成不同的任务
2 多个线程完成同一个任务
实现多个窗口卖100张票,提高效率
Tickets1.java
Tickets2.java
extends Thread 与implements Runnable 的区别:
1 Runnable便于线程间共享资源
2 Runnable屏蔽了Java的单继承
线程与进程:
1 进程间不可以访问彼此的地址空间
2 线程可以访问彼此的地址空间,代码段
1 实现多线程------精通,熟练
2 控制多线程------掌握
2.1 线程的优先级别:
高:10
低:1
默认:5
改变线程的默认优先级别
实现三个线程,它们的优先级别
PriorityTest.java
练习:
创建两个线程:
Thread-0使用Thread实现
无限打印输出“Hello”
Thread-1使用Runnable实现
无限打印输出”World”
HelloThread.java
JFrameThread.java
8月18日
2 控制多线程
2.1 线程的优先级别
2.2 控制线程的生命周期
ThreadLife.java
2.3 线程的安全与资源的同步
关键字:synchronized
可以修饰:
1 方法:
2 代码块:
作用:为资源增加监视器(锁)
synchronizedTest1.java
使用同步方法解决线程同步的问题
如果方法被 synchronized修饰,那么这个方法,就被称为同步方法,同时这个方法中的资源会被java使用监视器(锁)的机制,进行资源的同步与安全。
线程的同步是以牺牲程序的效率为代价的。
监视器(锁)的释放:
1 当程序抛出异常;
2 遇到break关键字
synchronizedTest2.java
使用同步代码块
同步代码块与同步方法的区别:
1 同步方法:将方法中的资源都会加入监视器
同步方法,相比同步代码块不够灵活,会牺牲更多资源
2 同步方法是线程独占式,当这个线程调用这个方法的时候,另外一个线程将无法调用这个方法
死锁:
当不同线程彼此进行同步资源的调用时,容易发生死锁问题
2.4 后台线程:
   用于监视前台线程的运行,当前台线程运行完毕,结束整个java程序
如何实现:
   void  setDaemon(boolean on)
   setDaemon(true) //这个线程为后台线程
DaemonTest.java
2.5 联合线程--------了解
当其他线程运行时,程序员可以进行线程的联合,合并
如何实现联合线程:
void join( )
JoinTest.java
2.6 线程组-------了解
   如何实现:
   ThreadGroup
ThreadGroupTest.java
2.7 计划任务-----熟练
   java.util.TimerTask //任务
   java.util.Timer //计时器,可以调用TimerTask
TimerTaskTest.java
实现步骤:
1 实现任务:
class xxx extends TimerTask
{
public void run( )
{

}
}
2 调度任务:
Timer timer = new Timer( );
timer.schedule(xx,xx);
改写JFrameThread.java
Splash实现的技术点:
1 JWindow
JLabel //加载图片
设置JWindow屏幕居中
Thread.sleep(2000);
Dispose //将JWindow清除
2 JProgressBar //进度条
setMaximum( ) //设置进度条的最大值
setIndeterminate(true) //设置进度条动画显示
setStringPainted(true) //允许字符串显示
setValue( 0) //设置进度条进度
JWindowTest.java
8月19日
3 多线程的通信--------多个线程共享一个资源,完成不同的任务
实现线程间通信的步骤:
1 编写共享空间(类)
2 在共享空间中分别声明操作属性的同步方法
3 在不同的线程中,通过构造获得共享空间的地址
MyTalk.java
Object:
wait( ) //释放锁,并且让当前线程处于等待状态
注意:
在调用wait( )的时候,如果没有锁(synchronized),那么程序会抛出异常:(java.lang.IllegalMonitorStateException)非法的监视状态异常
notife( ) //唤醒前一个wait( ) 的线程
notifyAll( ) //唤醒所有的线程
MyGoodsType.java
线程间通信方法2:--------了解
1 java.io.PipedInputStream
2 java.io.PipedOutputStream
//管道流
PipeStreamTest.java
|   //管道符
什么是管道符:
一个进程的输出,作为另一个进程的输入
回顾多线程:
1 进程与线程的区别
2 两种方式实现:
2.1 extends Thread
2.2 implements Runnable
3 extends Thread 与 implements Runnalbe的区别
4 实现:
4.1 多个线程完成不同任务
4.2 多个完成同一个任务
  5 控制多线程:
  5.1 线程的优先级别-----了解
  5.2 后台线程-----了解
  5.3 联合线程-----了解
  5.4 线程的安全,同步------掌握
.1 同步代码块
2 同步方法
3 同步代码块与同步方法的区别
6 线程间通信
6.1 编写方式
6.2 管道流-----了解
yield( ) //让出CPU------了解
java.awt.Canvas //应用于图形的绘制
固定用法:
public void  paint(Graphics g){

} //系统自动调用
Canvas是画布
Graphics是画笔
repaint( ) //再次调用paint
Canvas的实现步骤:
1 class MyCanvas extends Canvas
{

public void  paint(Graphics g){
g.   //绘制
}
}
2 MyCanvas mc = new MyCanvas( );
添加到容器中即可
CanvasTest.java
CanvasTest1.java
CanvasTest_2.java
8月21日
什么是TCP/IP协议?
TCP最早是1973年提出来的,1983年,被Unix4.2BSD系统采用,随着Unix的成功,Unix成为TCP/IP机器标准的网络协议。
Internet将消息从一个主机传递到另一个主机使用的协议称为网间协议(IP),这是Internet的网络协议。
TCP是一种可靠的面向连接的传送服务,消息在传送时被分割成一个个的小包,传输控制协议(TCP)负责收集这些小包,并将其按适当的次序放好来发送,在接收端收到后,再将其正确还原。传输控制处理了IP协议中没有处理的通信问题,向应用程序提供可靠的通信连接,能够自动适应网络变化,它保证数据包在传送中正确无误。
三次握手-------建立连接
端口-------计算机接收数据的入口:0——65535
端口的作用:
1 接收数据
2 发送数据
windows 查看端口
netstat—an
1——1024 //常用服务端口
ftp 服务  :21
ssh 服务 :22
telnet    :23
http     :80
window 查看IP地址:
igconfig /all
ping 192.168.3.xx //测试和对方是否可以连接
1 Repuest timed out //表示没通
2 Reply from …. //表示通
特殊的IP地址:
127.0.0.1 //本地回环地址——代表本机
127.0.0.1 ————localhost
ping localhost
192.168.1.10 //网段————代表计算机的区域
可调范围: 1------254
1 || 254 ------网关
0——255 //广播地址
子网掩码
ipconfig/all
www.163.com //域名
DNS服务器
互联网的访问过程:
1 浏览器缓存
2 hosts 表
c:\window\system32\drivers\etc
3 DNS服务器
UDP(用户数据包协议)
它和TCP一样位于传输层和IP协议配合使用,实现的是不可靠的,无连接的数据服务,在传输数据时省去包头,但它不能提供数据报的重传,常用于客户/服务器模式中,省去建立连接和拆除连接开销。
TCP/IP与套接字的关系:
TCP协议——字节流套接字
UDP协议——数据报套接字
Socket-------套按字
TCP/IP协议的层次体系结构:
应用层
传输层
网络层
数据链路层
URL(统一资源定位符)
URL代表着Internet上的指定资源,为浏览器指定了URL你不可以访问这个资源
Java程序同样可以使用URL访问网络资源
完整的URL字符串的写法:
协议 + 主机名+ 端口号+文件名:
如:
http://www.sohu.com/index.htm
http://localhost:8080/ipc/index.jsp
http://218.96.2.56:8080/jpc/index.jsp
练习:
使用URL类直接访问网络资源:
新建项目:Net
新建类:URLTest.java
思路:
1 URL ur1 = new URL(http://192.168.3.254:80);
2 BufferedReader br = new BufferedReader(
new InputStreamReader(ur1.openStream( ))
);
3 循环:br.readLine( );
java.net包只可以负责连接,通信或传输数据需要通过java.io包完成
TCP -----套接字
InetAddress 类 //IP地址的描述
可以将域名转换为IP
常用的InetAddress方法:
static InetAddress getByName(String host) 通过主机名来获取IP地址
static InetAddress getLocalHost( ) 获取本地机的InetAddress对象
InetAddressTest.java
Socket类:
Socket类是java网络应用程序中的一个基本构造模块,它实现 了程序之间双向通信端点,当一个Socket连接建立后,用户便可以从该Socket对象中获取输入输出流。要建立一个Socket连接有以下几种方式。
Socket(String host, int port)
Socket类的主要方法:
Void close( ) //关闭Socket
InputStream getInputStream( ) //获取Socket的输入流
OutputStream getOutputStream( ) //获取Socket的输出流
C(client) / S(server)架构
client //客户端
SocketTest.java
练习:
实现一个简单的扫描器
TCPScan.java
ServerSocket类用来监听所有来自指定端口的连接,并为每一新的连接建一个Socket对象,完成后客户机跟服务器便可以开始进行通信了,要建立一个ServerSocket对象有以下三种方法。
常用的构造:
ServerSocket(int port)
主要方法:
Socket accept( ) //接收该连接并返回该连接的Socket对象
void close( ) //关闭此服务器Socket
ServerSocketTest.java
8月22日
SimpleServer.java
思路:
1 打开本地端口
2 等待客户端的连接并获得客户端Socket
3 通过的Socket获得输入,输出流
4 给客户端发送欢迎消息
5 等待客户发送消息
SimpleClient.java
思路:
1 连接服务器
2 获得服务器的Socket,并获得输入,输出流
3 接收服务器欢迎消息,并发送消息给服务器
练习:
SimpleChatServer.java
SimpleChatClient.java
实现客户端与服务器的聊天功能
问题描述:
1 只可以连接一个客户端
2 代码过于机械化
ServerThread.java
Server.java
Client.java
练习:
服务器端可以接收客户端的指令,并且可以调用执行
新建项目:
RemoteCommand
Server
1 监听端口
2获得客户端的输入
3 使用Runtime.getRuntime( ).exec(“c:\xx”);
Client
1 连接
2 获得用户输入System.in
3 将用户输入发送到服务器端
8月23日
UDP套接字编程
DatagramPacket类
它代表UDP中的数据报,被发送的数据报包含了目的地地址及其内容。收到的数据报包含发送源地址及其内容。为创建一个数据报对象,可以使用以下方法
构造方法:
DatagramPacket(byte[ ] buf, int length)
DatagramPacket(byte[ ] byf, int length , InetAddress address, int port)
主要方法:
byte[ ]getData( ) //获取数据报中的内容
DatagramSocket类
只是包含了所要传送的数据,执行发送与接收数据的任务则是使用DatagramSocket类来完成,它创建了一个UDP套接字,可以使用以下方法构建
常用构造:
DatagramSocket( ) //发送时使用无参构造
DatagramSocket(int port) //接收数据包的
常用方法:
发送数据
void  send(DatagramPacket p)
接收数据
void  receive(DatagramPacket p)
练习:
使用UDP协议实现数据包的发送与接收
UdpReciv.java
UdpSend.java
写一个时间服务器:
getTimerServer.java
TimerClient.java
项目阶段:
要求点:
以TCP/IP通信实现一个完整功能的聊天系统:
1 用户的注册
2 聊天系统的公聊,私聊
服务器:
控制服务器的开启,关闭
控制系统中的注册用户
在线用户列表
客户端:
用户的注册,登录
保存聊天信息
用户可以选择私聊的对象
项目流程:
1 需求
2 设计-----形成文档
3 编码
4 测试
5 市场
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics