您的位置:首页 > 理论基础 > 计算机网络

黑马程序员——Java学习总结:多线程和网络编程

2015-07-21 10:03 726 查看
1、多线程概述

什么是多线程???

一个应用程序有多条执行路径,线程是依赖于进程而存在的。

二、多线程的实现方式一

1、创建多线程的方式一?

A创建一个类这个类继承Thread类

B重写run方法

C启动线程并执行

stat()方法做了几件事?

启动线程,自动调用run方法

线程越多越好吗?

不是,因为没开一个线程系统必然会为它分配内存。

Thread类下setName,getName方法的作用?

setName()为线程命名

getName()获取线程的名称

三、线程执行的随机性

1、为什么会出现线程执行的随机性?

因为在某个时间点CPU只会执行一个线程。

四、多线程的实现方式二

1、实现多线程的方式二

A创建一个类去实现Runnable接口

B重写run方法

C创建MyRunnable对象mr

D把对象mr作为参数传递到Thread类的构造方法中,得到了Thread对象。

注意事项:

第二种方式可以直接调用getName()方法可以获取当前线程的名字吗?

不能不能直接调用,但是可以间接调用

五、有了Thread类为什么还要有实现Runnable接口

1、避免了单继承的局限性

2、只创建了一个资源对象节省空间,更好的实现了数据操作分离。

六、线程的生命周期

1、线程的状态有

新建:创建一个线程对象

就绪:具备执行资格,不具备执行权

可能出现阻塞状态:都不具备

运行:都具备

死亡:线程对象变成垃圾,等待垃圾回收器回

用实现Runnable接口的方式模拟卖票出现了,重复和负数的情况,及解决方法

1、出现重复和负数的产生原因:

因为线程随机性和延迟性

2、同步关键字是?

synchronized

3、如何解决重复和负数的情况:

加锁

4、多线程程序出问题的判断条件?

a、看是否有共享数据

b、看共享数据是否被多条语句操作

c、是否在多线程程序中

十二、 测试不同同步机制的锁对象

什么是同步代码块、同步方法:

同步代码块就是把锁加在方法中

同步方法其实就是把锁加在方法声明上

同步代码块和同步方法的锁对象是谁:

同步代码块:任意对象(这里不要用匿名对象)

同步方法的锁对象是谁this

静态的同步方法锁对象是该类的字节码文件对象

什么时候考虑用同步代码块的方式锁呢?

当方法中不是所有代码都需要加锁的时候

什么时候考虑用同步方法的方式锁呢?

当方法中所有的代码都需要加锁的时候。

十五、通过等待唤醒机制让数据依次出现

Object类中 wait()

让线程等待,调用它的对象是锁对象

Object类中 notify()

唤醒线程,调用它的对象是锁对象

十六、等待唤醒机制的代码分析

回顾sleep方法和wait方法的区别?

sleep Thread类中 不释放锁对象 只能等时间

wait Object类中 释放锁对象 它可以被唤醒

十七、线程优先级

thread类下的public final int getPriority()

获取线程的优先级

thread类下的public final void setPriority(int newPriority)

设置线程的优先级

线程的默认优先级是(5),范围是1-10;

注意:线程优先级越大不代表它一定能先执行,也不代表它一定能先执行完

十八、暂停线程

1、thread类下的public static void yield()

暂停当前线程执行其他线程

2、yield()方法的作用或者用法?

让线程可以稍微的和谐一些,但是不能依赖它保证让数据依次出现

要想保证还得依靠等待唤醒机制。

十九、加入线程

1、thread类下 public final void join()

哪个线程对象调用该方法,其他线程必须等待该线程执行完毕才能执行。

注意事项:

哪个线程对象想要作为加入线程,必须先启动该线程。

二十、守护线程

Thread类下的public final void setDaemon(boolean on)

将该线程设置为守护线程

线程的随机性原理

多个程序其实是CPU的在做着高效切换执行的。

(4)线程的生命周期(面试题 画图自己补齐)



一、网络概述

1、怎么理解网络编程?

不同地理位置的计算机,通过IO流传输数据;

二、网络通信三要素

1、网络通信三大要素

IP地址:每台计算机在网络中的唯一标识

端口号:用来代表每个进程的逻辑地址

协议:通信规则

三、网络通信三要素之IP地址

获取本机IP

ipconfig

检测网络是否连通

ping+ip地址

四、网络通信三要素之端口

有效端口范围:

0-65535 其中0-1024是系统占用的端口

五、网络通信三要素之协议

1、TCP 和 UDP协议的区别

UDP:

数据需要打包否: 需要

数据大小有无限制:64k

面向有无链接:面向无连接

可靠否: 不可靠

速度快否:快

TCP:

数据需要打包否:不需要打包

数据大小有无限制:无限制

面向有无链接:有连接(三次握手)

可靠否:可靠

速度快否:慢

六、Socket机制概述

1、Socket包装了谁:

IP地址和端口

注意:发送端和接收端都需要有Socket。

七、InetAddress类的概述和使用

1、学完后说说你对IntAddress类的了解

他是一个实体类,它是包装IP地址的。

2、如果一个类没有提供构造方法,那么我们如何调用该类的非静态方法?

那就去找这个类中肯定有一个静态的方法返回值类型是该类的对象。

3、public static InetAddress getByName(String host)

通过主机名获取到IP地址以对象的形式。 host 这个地方可以传主机名,也可以传IP地址的字符串表示形式

4、public String getHostAddress()

获取该对象的IP地址字符串表示形式

5、public String getHostName()

获取该对象的主机名

八、UDP协议发送数据

1、DatagramSocket是什么?

是一个类,用它创建了发送端Socket对象

2、Datagrampacket这个类是干什么的?

是一个包裹类,DatagramSocket类中有个send()方法的参数是Datagrampacket该类型对象

3、UDP协议发送数据步骤?

A:创建发送端Socket对象

B:创建数据,并把数据打包

C:发送数据

D:释放资源

九、UDP协议接收数据

1、UDP协议接收数据步骤

A:创建接收端Socket对象

B:创建数据接收容器

C:调用接收数据的方法

D:解析数据包,并在控制台上显示

E:释放资源

2、为什么创建接收端的Socket对象用的是DatagramSocket中的带参构造DatagramSocket(int port)

因为我接收的时候只需要指定端口号就可以了

3、DatagramSocket类下public void receive(DatagramPacket p)

接收数据包

十二、广播地址概述

1、什么是广播地址?

就是网段后边的数组改成255 举例 192.168.25.255

十四、TCP协议发送数据

1、TCP协议客户端的步骤:

A:创建发送端Socket、对象

B:通过发送端Socket对象获取输出流对象

C:释放资源

2、Socket(String host, int port) 构造方法

host IP地址(直接写字符串的表示形式就可以)

port 端口号

3、Socket类下public OutputStream getOutputStream()

获取输出流对象

TCP协议:必须先开服务器端

十五、TCP协议接收数据

1、TCP协议服务器端的步骤:

A创建接收端Socket对象。

B监听连接

C通过Socket对象获取输入流对象

D释放资源

2、这次用的是ServerSocket类下的构造public ServerSocket(int port)这个构造要指定什么?

port 端口号

3、ServerSocket类方法public Socket accept()

侦听连接(获取到该Socket对象)

Socket

UDP协议

发送数据  DatagramSocket

接收数据  DatagramSocket

TCP协议

发送数据  Socket

接收数据  ServerSocket


二十、键盘录入数据写入文本文件

1、Socket类下public void shutdownOutput()方法?

禁用此套接字的输出流。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  多线程 网络