java学习之线程的操作方法
package com.gh.thread; /**
* 线程实现的两种方法
* 1、继承thread类
* 2、实现Runnable接口
* @author ganhang
*
*/
public class ThreadDemo { public static void main(String[] args) {
//第一种线程实现
Mythread mythread =new Mythread();
mythread.setName("自定义线程1");
mythread.start();
try {
Thread.sleep(2);//当前线程睡眠2毫秒
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(Thread.currentThread().getName());
//第二种线程实现
Thread thread=new Thread(new Mythread2(),"自定义线程2");
thread.start();
}
} class Mythread extends Thread{
@Override
public void run() {
for (int i = 0; i < 3; i++) {
//输出当前线程的名字和i;
System.out.println(Thread.currentThread().getName()+"--"+i);
}
}
}
class Mythread2 implements Runnable{ @Override
public void run() {
for (int i = 0; i <3; i++) {
System.out.println(Thread.currentThread().getName()+"--"+i);
}
} }
线程的同步
package com.gh.thread;
/**
* 同步实现顺序上厕所,假设厕所只有一个
* 1、使用synchronized同步代码块
* 2、使用同步方法
* @author ganhang
*/
public class ThreadDemo1 {
public static void main(String[] args) {
Mythread5 my=new Mythread5();
//注意这里必须使用同一个Mythread类的对象,不然无法同步
Thread t1=new Thread(my,"小白");//线程1
Thread t2=new Thread(my,"小黑");//线程2
//两个线程同时跑
t1.start();//小白要上厕所
t2.start();//小黑也要上厕所
}
}
class Mythread5 implements Runnable{
@Override
public void run() {
//同步代码块
synchronized (this) {//锁定对象一次只能进一个个
System.out.println(Thread.currentThread().getName()+"正在上厕所。。");
try {
Thread.sleep(1000);//模拟**。。。耗时1s
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(Thread.currentThread().getName()+"上完了。。");
}
}
}
中断线程
package com.gh.thread; /**
* 中断线程
* 1、interrupt()方法
* 2、自定义标记完成中断
* @author ganhang
*
*/
public class ThreadDemo2 {
public static void demo1() {
Thread t1 = new Thread(new Mythread3(), "线程1");
t1.start();
for (int i = 0; i < 10; i++) {
if (i == 5)
t1.interrupt();//只是个标记中断不会真正中断,是否中断还是由线程自己决定
System.out.println("main-" + i);
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
public static void demo2(){
Mythread4 my=new Mythread4();
Thread t1=new Thread(my,"线程2");
t1.start();
for(int i=0;i<10;i++){
if(i==5){
my.setFlag(true);//中断
}
System.out.println(Thread.currentThread().getName()+"--"+i);
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
public static void main(String[] args) {
demo1();//第一种方式实现
demo2();//第二种方式实现
}
} class Mythread4 implements Runnable {
private boolean flag = false; public boolean isFlag() {
return flag;
} public void setFlag(boolean flag) {
this.flag = flag;
} @Override
public void run() {
int i=0;
while (!flag) {
System.out.println(Thread.currentThread().getName() + "--" + i++);
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
} }
}
} class Mythread3 implements Runnable { public void run() {
int i = 0;
while (!Thread.interrupted()) {
System.out.println(Thread.currentThread().getName() + "--" + i++);
try {
Thread.sleep(1000);// sleep会清除interrupt状态
} catch (InterruptedException e) {
e.printStackTrace();
Thread.currentThread().interrupt();
}
}
}
}
java学习之线程的操作方法的更多相关文章
- Java学习笔记 线程池使用及详解
有点笨,参考了好几篇大佬们写的文章才整理出来的笔记.... 字面意思上解释,线程池就是装有线程的池,我们可以把要执行的多线程交给线程池来处理,和连接池的概念一样,通过维护一定数量的线程池来达到多个线程 ...
- 进阶Java编程(2)线程常用操作方法
线程常用操作方法 多线程的主要操作方法都在Thread类中定义的. 1,线程的命名和取得 多线程的运行状态是不确定的,那么在程序的开发之中为了可以获取到一些需要使用到的线程就只能依靠线程的名字来进行操 ...
- java学习之- 线程运行状态
标签(空格分隔): 线程运行状态 线程的运行状态: 如下是是我编写的一个图,大家可以作为参考: 1.new一个thread子类也是创建了一个线程: 2.创建完毕之后start()-----运行, 3. ...
- java学习之线程
一.线程总述: 线程是java当中一个重要的内容,如果想说线程的话,那我们应该先来讲一下什么是进程. 进程:那么什么是进程呢,进程从字面上来理解就是,正在进行的程序.就比如说我们在windows当中打 ...
- java学习之线程池的实现
package com.gh.threadpoor; import java.util.concurrent.ExecutorService; import java.util.concurrent. ...
- Java 学习笔记 线程控制
题目一 本质上来说,线程是不可控制的,线程的执行是由CPU资源分配决定的,我们无法干预系统CPU的资源分配,但我们可以增加条件来让线程按照我们的预想顺序来执行. 比如.如果当前的执行的线程不满足我们所 ...
- java学习之- 线程继承Thread类
标签(空格分隔): 线程 在java.lang包中有个Thread子类,大家可以自行查阅文档,及范例: 如何在自定义的代码中,自定义一个线程呢? 1.通过对api的查找,java已经提供了对线程这类事 ...
- Java学习:线程池
线程池 线程池概念:其实就是一个容纳多个线程的容器,其中的线程可以反复使用,省去了频繁创建线程对象的操作,无需反复创建线程而消耗过多的资源. 线程池:容器-->集合(ArrayList,Hash ...
- Java学习:线程的安全问题
线程的安全问题 模拟卖票案例创建三个的线程,同时开启,对共享的票进行出售 public class RunnableImpl implementsc Runnable{ //定义一个多线程共享的票源 ...
随机推荐
- 极客Web前端开发资源大荟萃
前端开发已经成为当前炙手可热的技术之中的一个.本周我们除了给大家带技术相关资讯,另一些技术人员经常使用的站点.希望大家不要错过我们本周的内容.原文来自:极客标签 为神马说敲代码是非常艰难的 程序猿 做 ...
- 用ahk脚本自己主动删除flashcookies
手动方法(请戳点击打开链接): 点击桌面左下脚的"開始"键 打开"控制面板" 并点击 "flash player" 项 进入 并点击&quo ...
- ie6兼容性,还需要测试么?迷茫。。。
最近公司网站在谷歌,火狐上测试都没有问题,但是在ietest,ie6上出现兼容问题 ,由于ietest好几次打开ie6都报错(尝试卸载重新安装几次无果),下载virtualbox安装自带ie6的xp系 ...
- HTTP有关知识
Cookie 调用Cookie时,由于可校验Cookie的有效期,以及发送方的域,路径,协议等信息,所以正规发布的Cookie里面的内容不会因来自其他web站点和攻击者的攻击而泄露. Set-Cook ...
- 转帖Jmeter中的几个重要测试指标释义
Aggregate Report 是 JMeter 常用的一个 Listener,中文被翻译为“聚合报告”.今天再次有同行问到这个报告中的各项数据表示什么意思,顺便在这里公布一下,以备大家查阅. 如果 ...
- Servlet之ServletContext以及文件操作
ServletContext ------------------------------------ ServletContext是什么? 与cookie,session比较. 可以把它想象成一个共 ...
- CSS复习第一天(简单规范)
1.有意义的html 优点:与表现性的页面相比,有意义的页面更容易后期的处理与维护. 便于浏览器与屏幕阅读器识别. 更加便于调试样式 ...
- KVO 的使用和举例
KVO(key-value Observer),通过命名可以联想到,一个监视着监视着键值配对,让一个对象A来监视另一个对象B中的键值,一旦B中的受监视键所对应的值发生了变化,对象A会进入一个回调函数, ...
- hdu 4119 Isabella's Message
Isabella's Message Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) ...
- 宣布与 NBC 合作直播索契冬季奥运
奥运开始的那天早些时候,NBC 和 Microsoft 宣布选择 Windows Azure 媒体服务为 2014 年俄罗斯索契冬奥会提供现场直播.与以往不同,以往的冬奥会采用了有限的流,但本届 ...