网络编程、多线程与lambda表达式
网络编程
- public class InetAddress extends Object implements Serializable:这个类代表一个互联网协议(IP)地址。
- public static InetAddress getByName(String host):在给定主机名的情况下确定ip地址
- public static InetAddress getLocalHost():返回本地主机
- public String getHostName():获取此IP地址的主机名
- public String getHostAddress():返回IP地址字符串(文本)
- public byte[] getAddress():返回此对象的原IP地址
多线程
-
创建线程方式一:继承Thread类,重写run()方法,调用start()开启线程
- 子类继承Thread类具备多线程能力
- 启动线程:子类对象.start()
- 不建议使用:避免OOP单继承局限性
-
创建线程方式二:实现Runnable接口,重写run()方法.newThread()丢入Runnable接口实现类,调用start()开启线程
- 实现Runnable具备多线程能力
- 启动线程:传入目标对象+Thread对象.start()
- 推荐使用:避免单继承局限性,灵活方便,方便同一个对象被多个线程使用
-
创建线程方式三:实现callable接口,重写call方法(有返回值)
-
FutureTask future = new FutureTask(new MyThread3());
-
new Thread(future)执行该线程,get()方法获取重写call()方法的返回值
-
//创建执行服务 ExecutorService ser = Executors.newFixedThreadPool(3); //提交执行 Future<Boolean> r1 = ser.submit(dowmload1); //获取结果 Boolean rs1 = r1.get(); System.out.println(rs1); //关闭服务 ser.shutdown();
-
-
并发问题:多个线程操作同一资源,线程不安全,会出现数据紊乱
-
停止线程
-
推荐线程自己停下来,建议使用标志位,当flag=false,则线程终止运行
-
public void stop(){this.flag = false;} //停止线程
-
-
线程休眠
- sleep(时间)指定当前线程阻塞的毫秒数,存在异常InterruptedException,sleep时间达到后线程进入就绪状态,sleep可以模拟网络延迟,倒计时等,每一个对象都有一个锁,sleep不会释放锁;
System.out.println(new SimpleDateFormat("HH:mm:ss").format(new Date())); Thread.sleep(1000); -
线程礼让
-
thread.yield()
-
让当前正在执行的线程暂停,但不阻塞,将线程从运行状态转为就绪状态,让cpu重新调度,礼让不一定成功,看cpu心情
-
-
线程插队
- thread.join();
-
state(状态)
-
获取线程状态thread.getState();
-
while(state!=Thread.State.TERMINATED)//只要线程不终止就一直输出
-
-
线程优先级
- getPriority():获取优先级
- setPriority():设置优先级
-
守护线程
- setDaemon():默认为false用户线程,设置为true则为守护线程,例如gc,建议在start之前;
-
Synchronized和Lock比较.
-
Synchronized是关键字,内置语言实现,Lock是接口。. Synchronized在线程发生异常时会自动释放锁,因此不会发生异常死锁。. Lock异常时不会自动释放锁,所以需要在finally中实现释放锁。. Lock是可以中断锁,Synchronized是非中断锁,必须等待线程执行完成释放锁。. Lock可以使用读锁提高多线程读效率。
-
//定义lock锁 private final ReentrantLock lock = new ReentrantLock();
-
-
线程池
-
ExecutorService和Executors--工具类
-
ExecutorService:真正的线程池接口,常见子类ThreadPoolExecutor
-
void execute(Runable command):执行任务、命令,没有返回值,一般用来执行Runnable
-
Future submit(Callable task):执行任务,有返回值,一般来执行Callable -
void shutdown():关闭连接池
-
//创建线程池 ExecutorService service = Executors.newFixedThreadPool(10); //添加线程 service.execute(new Thread(new MyThead(),"x")); service.execute(new Thread(new MyThead(),"y")); service.execute(new Thread(new MyThead(),"z")); //关闭线程池 service.shutdown();
-
lambda表达式
- lambda表达式只能有一行代码的情况下才能简化成一行,如果多行,则用代码块包裹
- 前提是接口为函数式接口
- 多个参数也可以去掉参数类型,要去掉都去掉,必须加上括号
- new Thread( ()->{sout} );

浙公网安备 33010602011771号