zoukankan      html  css  js  c++  java
  • 2017年4月17号课堂笔记

    2017年4月17号 空气质量:重度雾霾加柳絮

    内容:多线程练习demo,synchronized,arraylist如何用synchronized使线程安全举例,关于网络的一点儿基础知识,sendmail

    一、多线程练习demo

    老师代码:

    package cn.bdqn.join05;

    /**
    * 模拟 10个特需号病人看病
    */
    public class HosThread implements Runnable {

    @Override
    public void run() {
    for (int i = 1; i <= 10; i++) {
    System.out.println("*******特需号" + i + "在看病");
    try {
    Thread.sleep(1000);
    } catch (InterruptedException e) {
    e.printStackTrace();
    }
    }
    }

    // main主线程
    public static void main(String[] args) {
    // 实例化特需号的线程类
    Thread thread = new Thread(new HosThread());
    // 特需号比普通号的概率高
    thread.setPriority(thread.MAX_PRIORITY);
    thread.start();
    // 主线程 普通号也并行看病
    for (int i = 1; i <= 50; i++) {
    System.out.println("普通号" + i + "在看病");
    try {
    Thread.sleep(500);
    } catch (InterruptedException e) {
    e.printStackTrace();
    }
    // 如果普通号看到第10个人 特需号需要全部结束
    if (i == 10) {
    try {
    thread.join();
    } catch (InterruptedException e) {
    e.printStackTrace();
    }
    }

    }

    }
    }

    二、synchronized部分知识图示

    三、synchronized 方法

    老师代码:

    1)线程不安全:

    package cn.bdqn.sale07;

    // 线程不安全
    public class MyThread implements Runnable {

    private int count = 100; // 库存的票数
    private int num = 0; // 记录买的票数

    @Override
    public void run() {
    while (true) {
    if (count <= 0) {
    break;
    }
    num++;
    count--;
    // 卖出一张票
    System.out.println(Thread.currentThread().getName() + "抢到了" + (num)
    + "===>剩余票数是:" + (count));
    }
    }

    public static void main(String[] args) {
    MyThread thread = new MyThread();
    Thread t1 = new Thread(thread, "小黑");
    Thread t2 = new Thread(thread, "小白");
    Thread t3 = new Thread(thread, "黄牛");
    t1.start();
    t2.start();
    t3.start();
    }

    }

    2)同步方法:

    package cn.bdqn.sale07;

    //同步方法
    public class MyThread02 implements Runnable {

    private int count = 100; // 库存的票数
    private int num = 0; // 记录买的票数
    private boolean flag = false; // run()什么时候不调用售票的方法

    // 给方法加锁,如果一个线程进入,则其他所有的线程需要等待!
    public synchronized void sale() {
    if (count <= 0) {
    flag = true;
    return;
    }
    num++;
    count--;
    try {
    Thread.sleep(1000);
    } catch (InterruptedException e) {
    e.printStackTrace();
    }

    // 卖出一张票
    System.out.println(Thread.currentThread().getName() + "抢到了" + (num)
    + "===>剩余票数是:" + (count));
    }

    @Override
    public void run() {
    while (!flag) {
    sale();
    }

    }

    public static void main(String[] args) {
    MyThread02 thread = new MyThread02();
    Thread t1 = new Thread(thread, "小黑");
    Thread t2 = new Thread(thread, "小白");
    Thread t3 = new Thread(thread, "黄牛");
    t1.start();
    t2.start();
    t3.start();
    }

    }

    四、synchronized 块

    老师代码:

     1)同步代码块:

    package cn.bdqn.sale07;

    //同步代码块
    public class MyThread03 implements Runnable {

    private int count = 100; // 库存的票数
    private int num = 0; // 记录买的票数

    @Override
    public void run() {
    while (true) {
    synchronized (this) {//锁的其实是对象
    if (count <= 0) {
    break;
    }
    try {
    Thread.sleep(1000);
    } catch (InterruptedException e) {
    e.printStackTrace();
    }
    // 卖出一张票
    System.out.println(Thread.currentThread().getName() + "抢到了"
    + (++num) + "===>剩余票数是:" + (--count));
    }
    }

    }

    public static void main(String[] args) {
    MyThread03 thread = new MyThread03();
    Thread t1 = new Thread(thread, "小黑");
    Thread t2 = new Thread(thread, "小白");
    Thread t3 = new Thread(thread, "黄牛");
    t1.start();
    t2.start();
    t3.start();
    }

    }

    五、arraylist如何用synchronized使线程安全举例(同步代码块)

    老师代码:

    package cn.bdqn.test08;

    import java.util.ArrayList;

    public class ArrayListTest implements Runnable {
    private ArrayList<String> list = new ArrayList<>();
    private int index = 0;

    @Override
    public void run() {
    while (true) {
    synchronized (list) {
    if (index > 100) {
    break;
    }
    list.add(index + "");
    System.out.println("下标为" + index + "的值是===》" + list.get(index));
    index++;
    }
    }

    }

    public static void main(String[] args) {
    // 实例化线程对象
    ArrayListTest test = new ArrayListTest();
    for (int i = 1; i <= 10; i++) {
    new Thread(test).start();
    }
    }

    }

    六、关于网络的一点儿基础知识

    1、IP地址:

     

     端口号:独一无二

     2、TCP/IP协议

    本机预留IP:

    1) IPV4:127.0.0.1

    2) IPV6: : : 1

     3、远程连接

    1)windows+R------>mstsc:远程桌面连接(进入下图所示界面,输入想要连接电脑的IP地址,之后需要输入被连接电脑用户名和密码)

    2)远程连接前需要条件:双方都关闭防火墙,以及右键点击我的电脑进行远程设置(如下图所示):

    3)使用此方式远程连接后,被连接电脑黑屏,被连接电脑操作后,远程连接会断开。

     4、DNS域名解析

    七、sendmail

    先导入javax.mail.jar包

     

    老师代码:

    package cn.bdqn.mail;

    import java.util.Properties;

    import javax.mail.Authenticator;
    import javax.mail.BodyPart;
    import javax.mail.Message;
    import javax.mail.Multipart;
    import javax.mail.PasswordAuthentication;
    import javax.mail.Session;
    import javax.mail.Transport;
    import javax.mail.internet.InternetAddress;
    import javax.mail.internet.MimeBodyPart;
    import javax.mail.internet.MimeMessage;
    import javax.mail.internet.MimeMultipart;

    public class SendMail {

    public static void main(String[] args) {
    // 定义收件人邮箱
    String to = "123456789@qq.com";
    // 定义发件人邮箱
    final String from = "987654321@qq.com";
    // 设置邮件的主机
    String host = "smtp.qq.com";

    // 设置系统属性
    Properties properties = System.getProperties();
    // 设置邮件服务器需要的参数
    properties.setProperty("mail.smtp.host", host);
    properties.setProperty("mail.smtp.socketFactory.class",
    " javax.net.ssl.SSLSocketFactory");
    properties.setProperty("mail.smtp.port", "465");
    properties.setProperty("mail.smtp.socketFactory.port", "465");
    properties.put("mail.smtp.auth", "true");

    // 创建会话
    Session session = Session.getDefaultInstance(properties,
    new Authenticator() {
    @Override
    protected PasswordAuthentication getPasswordAuthentication() {
    return new PasswordAuthentication(from, "jpwy999_");
    }
    });

    try {
    // 开始写邮件内容
    MimeMessage message = new MimeMessage(session);
    message.setFrom(new InternetAddress(from));
    message.addRecipient(Message.RecipientType.TO, new InternetAddress(
    to));
    // 邮件标题
    message.setSubject("月薪500K招聘 java初级程序猿");
    BodyPart part = new MimeBodyPart();
    part.setText("详情请咨询150********! 联系人:xxx");

    Multipart multipart = new MimeMultipart();
    multipart.addBodyPart(part);
    message.setContent(multipart);
    Transport.send(message);
    System.out.println("成功了!");
    } catch (Exception e) {
    System.out.println("报错了 !");
    }

    }
    }

    八、作业

    1、开始构思写U1的项目,准备写完答辩(不要逃避,慢慢写)

    2、做题

    九、考试

    2017.04.17
    15: 05开始,16:10结束;答题时间:59 分钟;检查时间: 1分钟;
    成绩:88 分
    网络卡顿加上出去找椅子耗费5分钟,因为隔壁讲课太吵所以听音乐(结果总是被音乐带走神以至于答题太慢)

    多做题,刷复习题!巩固之前的知识点!

    十、老师辛苦了!

     

  • 相关阅读:
    uva10986 堆优化单源最短路径(pas)
    动态规划②——线性动态规划(背包)
    UVA567
    动态规划①——记忆化搜索
    网络号与主机号的区分与计算(转)
    故障处理-ORA-00376/ORA-01110
    Oracle的自动统计信息不收集直方图的信息
    Oracle 11g的Redo Log和Archive Log的分析方法
    SQL优化 1
    oracle 11g 通过在线重定义方式修改表结构
  • 原文地址:https://www.cnblogs.com/wsnedved2017/p/6722859.html
Copyright © 2011-2022 走看看