博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
线程与进程
阅读量:4650 次
发布时间:2019-06-09

本文共 2887 字,大约阅读时间需要 9 分钟。

线程:一个进程最少有一个线程,线程是进程的一个执行单元

进程:具有一定独立功能的程序,一个实体,每个进程都有他自己的地址空间。

 

进程状态:运行、执行、阻塞

 

线程的两种实现方式:

1)继承Thread,重写run方法

2)实现Runnable接口,实现run方法(推荐使用,因为此种方法相当与添加了个任务,而不是创建新的线程,且只能单继承)

 

join方法实例:

public class JoinTest {    public static void main(String [] args) throws InterruptedException {        ThreadJoinTest t1 = new ThreadJoinTest("小明");        ThreadJoinTest t2 = new ThreadJoinTest("小东");        t1.start();        /**join方法可以传递参数,join(10)表示main线程会等待t1线程10毫秒,10毫秒过去后,         * main线程和t1线程之间执行顺序由串行执行变为普通的并行执行         */        t1.join(10);        t2.start();    }}class ThreadJoinTest extends Thread{    public ThreadJoinTest(String name){        super(name);    }    @Override    public void run(){        for(int i=0;i<1000;i++){            System.out.println(this.getName() + ":" + i);        }    }}

sleep方法及自定义标记中断线程demo(interrupt()中断线程,任何线程中断线程,抛出异常时,线程中断将被清除):

public class ThreadTest {    public static void main(String[] args){        MyThread mt = new MyThread();        //推荐        MyRunnable mr = new MyRunnable();        MyRunnable1 mr1 = new MyRunnable1();        mr1.flag = true;        //Runnable接口本质不是一个线程,相当一个任务,需要把它放到线程中去        Thread t2 = new Thread(mr);        Thread t3 = new Thread(mr1);        //mt.start();        t2.start();        t3.start();        for(int i  = 0 ; i< 20 ;i++){            //System.out.println(Thread.currentThread().getName()+"-b"+i);            try {                //sleep为静态方法,让当前线程休眠0.5s                Thread.sleep(100);            } catch (InterruptedException e) {                e.printStackTrace();            }            if(i==10){                mr1.flag=false;            }        }    }}//线程的第一种实现方式:继承Thread类class MyThread extends Thread{    @Override    public void run() {        for(int i = 0; i < 20; i++){            System.out.println(Thread.currentThread().getName()+"-a"+i);            try {                //sleep为静态方法,让当前线程休眠0.5s                Thread.sleep(100);            } catch (InterruptedException e) {                e.printStackTrace();            }        }    }}//线程的第二种实现方式:实现Runnnable接口class MyRunnable implements  Runnable{    @Override    public void run() {        for(int i = 0; i < 20; i++){            System.out.println(Thread.currentThread().getName()+"-c"+i);            try {                Thread.sleep(100);            } catch (InterruptedException e) {                e.printStackTrace();            }        }    }}//自定义标记中断线程class MyRunnable1 implements  Runnable{    boolean flag;    int i = 0;    public MyRunnable1(){        flag = true;    }    @Override    public void run() {        while(flag){            System.out.println(Thread.currentThread().getName()+"-d"+(i++));            try {                Thread.sleep(100);            } catch (InterruptedException e) {                e.printStackTrace();            }        }    }}

 

转载于:https://www.cnblogs.com/wenbiquan/p/11121568.html

你可能感兴趣的文章
Elgg网站迁移指南
查看>>
installshield 注册dll
查看>>
Sublime Text 3 及Package Control 安装(附上一个3103可用的Key)
查看>>
Get MAC address using POSIX APIs
查看>>
基于uFUN开发板的心率计(一)DMA方式获取传感器数据
查看>>
【dp】船
查看>>
oracle, group by, having, where
查看>>
⑥python模块初识、pyc和PyCodeObject
查看>>
Kibana:分析及可视化日志文件
查看>>
nodejs pm2使用
查看>>
cocos2d-x 3.10 PageView BUG
查看>>
装饰器的基本使用:用户登录
查看>>
CSS选择器总结
查看>>
mysql中sql语句
查看>>
head/tail实现
查看>>
sql语句的各种模糊查询语句
查看>>
vlc 学习网
查看>>
Python20-Day05
查看>>
Real World Haskell 第七章 I/O
查看>>
C#操作OFFICE一(EXCEL)
查看>>