多线程学习 一个面试题引发的思考

代码

“`
public void testThread(){
new Thread(new Runnable(){

@Override
public void run() {
// TODO Auto-generated method stub
System.out.println(“1”);
}}

).start();
Thread.yield();
System.out.println(“2”);
}

“`
Thread.yield();的作用是让当前线程让步,使当前线程从执行状态(运行状态)变为可执行态(就绪状态)。cpu会从众多的可执行态里选择。
说的很直白了其实。
而如果不加Thread.yield();那么“2”是会先打印的。原因就是start方法调用后在被调用(callee)的新线程上还要经过一些JVM内部的初始化动作才能跑到指定的入口方法。
so,应该是主线程执行完之后再执行已就绪的线程。

关于重写对象的hashCode方法和equals方法后HashMap还是可以重复的问题

class User {
private String name;
public String getName() { return name; }
public void setName(String name) { this.name = name; }
public User(String name) { super(); this.name = name; }
@Override public int hashCode() { return 2 * name.hashCode(); }
public boolean equals(Object user) { if (this.getName().equals(((User) user).getName())) { return true; } else return false; }
@Override public String toString() { return “User [name=” + name + “]”; }

代码贴一下。之前一直不成功,因为把equals方法写成了public boolean equals(User user) 。

原因很明了了,object中的equals是被继承了,只不过重载了一下。

因此在hashmap的 put里还是相当于不相等的。

哈哈,顺道复习了下重载和重写。常用但是忘了定义都忘得差不多了。

温故而知新吧。

在安装php+nginx时踩到的坑

服务器上之前用的是php+apache做的静态服务器,放个官网。因为后期打算放个论坛,因此想用把nginx先用上,方便以后负载变高时的扩展。

nginx的安装没什么,找个教程复制下命令就顺利安装成功。

但是php本来用的是7.1,集成apache没有任何问题。但是编译的时候没有少了很多扩展,只能重新编译安装。然后就是喜闻乐见的编译失败,提示ext/mysqlnd/.libs/mysqlnd_ps.o: In function `mysqlnd_stmt_fetch_row_buffered。搜索了下,没有靠谱的回答,咋试都不行。最后选择了换版本,重新下载了7.0版本,然后就安装成功了。初步怀疑是php7和系统的mysql配置不兼容。

还有一个问题使用nginx的初始配置文件,报了个file not found。修改这一行:fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;

还有 需修改location / {
root /usr/local/apache2/htdocs;
index index.html index.htm;
}

后才能识别非php文件。