重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
import java.util.concurrent.Semaphore;
为天宁等地区用户提供了全套网页设计制作服务,及天宁网站建设行业解决方案。主营业务为成都网站制作、做网站、天宁网站设计,以传统方式定制建设网站,并提供域名空间备案等一条龙服务,秉承以专业、用心的态度为用户提供真诚的服务。我们深信只要达到每一位用户的要求,就会得到认可,从而选择与我们长期合作。这样,我们也可以走得更远!
/**
*
* @author Mi Zhou
*/
public class LibraryDemo {
// 主要在于理解多线程变量共享和互斥的问题
// 这里共享和互斥的变量就是 图书馆的这10个座位
// 我们用信号量 Semaphore 来表示用 10 个座位的这个图书馆
// (如果目前不知道什么是 Semaphore,建议先了解这个概念)
public static void main(String[] args) throws Exception {
// 创建有 10 个许可的信号量(在这里可以理解为图书馆,图书馆最多容纳 10 个人)
Semaphore semaphore = new Semaphore(10);
// 假设有 15 个人来图书馆读书,每个人都在图书馆待 1 秒
for (int i = 1; i = 15; ++i) {
ReaderRunnable rr = new ReaderRunnable(i, 1, semaphore);
new Thread(rr).start();
}
// 查看输出你会发现图书馆最多是同时 10 个读者在里面
}
}
// 读者线程
class ReaderRunnable implements Runnable {
private final int readerNo; // 读者编号
private final int stayTime; // 这个读者在图书馆待的时间,以 秒 计
private final Semaphore semaphore; // 当前的图书馆
public ReaderRunnable(int readerNo, int stayTime, Semaphore semaphore) {
this.readerNo = readerNo;
this.stayTime = stayTime;
this.semaphore = semaphore;
}
@Override
public void run() {
try {
// 请求进入图书馆,如果图书馆没有座位了,这个方法会阻塞,直到图书馆有座位
semaphore.acquire();
System.out.println("读者 " + readerNo + " 进入图书馆");
Thread.sleep(stayTime * 1000); // 在图书馆待着
System.out.println("读者 " + readerNo + " 离开图书馆");
semaphore.release(); // 离开图书馆
} catch (InterruptedException ex) {
ex.printStackTrace(System.err);
}
}
}
(1)session.invalidate();
(2)服务器有session过期时间,达到过期时间没有访问,自动就注销了
(3)切断与服务器的会话连接,如关闭浏览器、浏览页也可以,这样做不会实时让服务器上的session注销,但只要你不保存之前用过的session信息并重复使用(或重放),再次访问时服务器会新分配一个session
Java 的执行顺序是从main方法开始的,要是main方法结束,那么整个程序也结束了。但是可以开一个和主方法并列的线程达到你想完成的功能
点击注销,跳转到后台,去掉当前用户session,然后跳转登录界面。
你要先选择 你想你要注销的那段话
再按 CTRL + /
效果如下
// import com.rdi.flex.constant.Constant;
// import com.rdi.flex.service.ServiceLocator;
// import com.rdi.ncms.entity.*;
// import com.rdi.ncms.utils.CacheUtil;
你要取消注释 就再选择你已经注释的代码
再按 CTRL + /
效果如下
import com.rdi.flex.constant.Constant;
import com.rdi.flex.service.ServiceLocator;
import com.rdi.ncms.entity.*;
import com.rdi.ncms.utils.CacheUtil;
还一种 ctrl+shirft+c 操作步骤跟上面一样
效果
/* import com.rdi.flex.constant.Constant;
import com.rdi.flex.service.ServiceLocator;
import com.rdi.ncms.entity.*;
import com.rdi.ncms.utils.CacheUtil; */
都是可以实现你的注销一段话的 两种不同的注释!