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分钟,因为隔壁讲课太吵所以听音乐(结果总是被音乐带走神以至于答题太慢)

 

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

 

十、老师辛苦了!

 

 

posted @ 2017-04-17 16:13  不抽烟的香吉士  阅读(159)  评论(0编辑  收藏  举报