java创建线程的两种方法
来源:互联网 发布:腾讯微信大数据 编辑:程序博客网 时间:2024/05/17 08:33
第一种实现Runnable接口创建线程。
public class ProgApp {public static void main(String[] args) {Programe p = new Programe();Play p1 = new Play();Thread t = new Thread(p);Thread t1 = new Thread(p1);t.start();t1.start();}}
public class Play implements Runnable{@Overridepublic void run(){for(int i = 0; i < 10; i++){System.out.println("运动-->"+i);}}}
public class Programe implements Runnable{@Overridepublic void run(){for(int i = 0; i < 10; i++){System.out.println("敲helloworld-->"+i);}}}
第二种继承Thread类创建线程。
public class Rabbit extends Thread{@Overridepublic void run(){for(int i = 0; i < 10; i++){System.out.println("兔子跑了"+i+"步");}}}
public class Tortoise extends Thread{@Overridepublic void run(){for(int i = 0; i < 10; i++){System.out.println("乌龟跑了"+i+"步");}}}
public class Rabbit_Tortoise_APP {public static void main(String[] args) {Rabbit r = new Rabbit();Tortoise t = new Tortoise();r.start();t.start();}}
但是我们一般比较常用用匿名类来实现这些功能。
匿名类实现Runnable接口创建线程。
public class NiMingClass {public static void main(String[] args) {Runnable q = new Runnable(){public void run(){for(int i=0;i<10;i++){System.out.println("qqqq--->"+i);}}};Runnable t = new Runnable(){public void run(){for(int i=0;i<10;i++){System.out.println("tttt--->"+i);}}};new Thread(q).start();new Thread(t).start();}}匿名类继承Thread类创建线程。
public class NiMingClass1 {public static void main(String[] args) {new Thread(){public void run(){for(int i=0;i<10;i++){System.out.println("qqqqq--->"+i);}}}.start();new Thread(){public void run(){for(int i=0;i<10;i++){System.out.println("tttt-->"+i);}}}.start();}}
每创建一个Thread类的对象,就是创建了一个线程,其实主函数也是一个线程,所以你程序中的线程数总是比你自己创建的线程数多一个,即多了一个主函数线程。
如果为一个函数加上synchronized关键字后,就是只允许一个线程对这个函数进行访问,只有当它自己自动退出的时候才结束,否则就不会轮到别的线程去执行这个函数。
public void run() {System.out.println(Thread.currentThread().getName()+n);System.out.println(Thread.currentThread().getName()+n);System.out.println(Thread.currentThread().getName()+n);System.out.println(Thread.currentThread().getName()+n);System.out.println(Thread.currentThread().getName()+n);System.out.println(Thread.currentThread().getName()+n);System.out.println(Thread.currentThread().getName()+n);System.out.println(Thread.currentThread().getName()+n);System.out.println(Thread.currentThread().getName()+n);n--;System.out.println(n);}运行结果(每一次结果可能不一样):
rrrr10
qqqq10
rrrr10
qqqq10
rrrr10
qqqq10
rrrr10
qqqq10
qqqq10
rrrr10
qqqq10
rrrr10
rrrr10
rrrr10
rrrr10
qqqq10
9
qqqq9
qqqq9
8
加上synchronized关键字后。
public synchronized void run() {System.out.println(Thread.currentThread().getName()+n);System.out.println(Thread.currentThread().getName()+n);System.out.println(Thread.currentThread().getName()+n);System.out.println(Thread.currentThread().getName()+n);System.out.println(Thread.currentThread().getName()+n);System.out.println(Thread.currentThread().getName()+n);System.out.println(Thread.currentThread().getName()+n);System.out.println(Thread.currentThread().getName()+n);System.out.println(Thread.currentThread().getName()+n);n--;System.out.println(n);}运行结果(运行多次结果完全一样):
rrrr10
rrrr10
rrrr10
rrrr10
rrrr10
rrrr10
rrrr10
rrrr10
rrrr10
9
qqqq9
qqqq9
qqqq9
qqqq9
qqqq9
qqqq9
qqqq9
qqqq9
qqqq9
8
阅读全文
0 0
- Java创建线程的两种方法
- Java创建线程的两种方法
- Java创建线程的两种方法
- java线程的两种创建方法
- Java创建线程的两种方法
- java 创建线程的两种方法
- java---------创建线程的两种方法
- Java创建线程的两种方法
- Java线程创建的两种方法
- Java创建线程的两种方法
- Java 创建线程的两种方法
- Java 创建线程的两种方法
- Java创建线程的两种方法
- Java 创建线程的两种方法
- java创建线程的两种方法
- java创建线程的两种方法
- Java创建线程的常用的两种方法
- java中创建线程的两种方法的区别
- Android:实现装备购买
- C++作业6
- How do I clone a github project to run locally?
- 闪电狗 发送邮件 配置
- 使用HttpClient实现文件的上传下载
- java创建线程的两种方法
- leetcode 36. Valid Sudoku 数独有效
- Ajax比较
- 老版本的环信,实现消息撤回功能。
- linux ifconfig 查看网卡
- springMVC系列(七)——springMVC实现restful风格开发(post、get、put、delete)
- libvirt KVM
- 动画收集
- 判断光驱是否可读