从零开始学java - 第二十一天

117 阅读2分钟

这是我参与11月更文挑战的第21天,活动详情查看:2021最后一次更文挑战

今天继续~

InetAddress类的方法

  • 这个类表示互联网ip地址

getByAddress(byte[] addr) - 返回InetAddress对象

getByAddress(String host,byte[] addr) - 根据提供的主机名和IP地址创建InetAddress

getByName(String host) - 在给定主机名的情况下确定主机的 IP 地址

getHostAddress() - 返回IP地址字符串

getHostName() - 获取此 IP 地址的主机名

getLocalHost() - 返回本地主机

toString() - 转换为字符串

java发送邮件

  • 想要完成此操作需下载两个额外的包,分别是JavaMail APIJava Activation Framework

发送一封简单的E-mail

import java.util.*;
import javax.mail.*;
import javax.mail.internet.*;
import javax.activation.*;

public class SendEmail{
    public static void main(String[] args){
        String to = "111@qq.com";
        String from = "222@qq.com";
        String host = "localhost";
        
        Properties properties = System.getProperties();
        
        properties.setProperty("mail.smtp.host",host);
        
        Session session = Session.getDefaultInstance(properties);
        
        try{
            MimeMessage message = new MimeMessage(session);
            
            message.setFrom(new MimeMessage(from));
            
            message.addRecipient(Message.RecipientType.TO,new InternetAddress(to));
            
            message.setSubject("This is Subject");
            
            message.setText("This is actual message");
            
            Transport.send(message);
        }catch(MessagingException mex){
            mex.printStackTrace();
        }
    }
}

ps:简单来说就是设置发送邮箱所需要的所有信息,把他们全部放在message里,最后通过send方法去把它们发送出去

发送一封带有HTML的E-mail

  • 与上面的代码几乎一样,只不过在往message里加东西的时候多加一项:
message.setContent("<h1>this is html</h1>")

发送带有附件的html

  • 与最上面的代码几乎一样,只不过会加上附件的语句:
messageBodyPart = new MimeBodyPart();
String filename = "file.txt";
DataSource source = new FileDataSource(filename);
messageBodyPart.setDataHandler(new DataHandler(source));
messageBodyPart.setFileName(filename);
multipart.addBodyPart(messageBodyPart);

Transport.send(message);

java 多线程编程

  • 多线程是多任务的一种特别的形式,但多线程使用了更小的资源开销
  • 多线程可以满足程序员编写高效率的程序来达到充分利用cpu的目的

线程的生命周期

新建状态

  • 使用new关键字和Thread类建立一个线程后,该线程对象处于新建状态,会一直持续到start()的执行

就绪状态

  • 当线程对象调用了start()后,线程就进入了就绪状态

运行状态

  • 当就绪状态的线程获取了cpu资源,就可以执行run(),此时线程就进入了运行状态,它可能会变成阻塞状态、就绪状态和死亡状态

阻塞状态

  • 当线程执行了sleepsuspend等方法失去占用资源后,该线程就会由运行状态进入阻塞状态,睡眠时间结束或者获得资源都可以重新进入就绪状态,分为三种:
  • 等待阻塞:运行状态下执行wait()使线程进入等待阻塞状态
  • 同步阻塞:线程获取synchronized同步锁失败
  • 其他阻塞:调用sleepjoin发出I/O请求时线程会进入阻塞状态,当两者终止时线程恢复就绪状态

死亡状态

  • 线程完成任务或终止后,该线程就会切换到死亡状态(结束)