java Thread两种简单用法总结

方法一: 用继承Thread实现

实例:

package threadtest13;
//多线程的写法2,用两种情况变换,
//情况1:新建一个对象,两个线程共享一个对象。另外是新建两个对象,两个线程用两个对象
//情况2:int i=0;拿到run()外面与在run()里面两种情况。
//上面4种情况可以排列组合试一下
publicclass Thread13 {

publicstaticvoid main(String args[]){
MyThread myThread =new MyThread();

// MyThread myThread2= new MyThread();//2

Thread t1=new Thread(myThread);
Thread t2=new Thread(myThread);
//Thread t2= new Thread(myThread2); //2
t1.start();
t2.start();
}

}

class MyThread extends Thread {
// int i=0;//1
publicvoid run() {
String name = Thread.currentThread().getName();
String inf=Thread.currentThread().toString();
long idnum = Thread.currentThread().getId();
for(int i=0;i<10;i++){//不管是新建一个对象,还是两个对象,//2,都是打印20个数据
// for(;i<10;i++){//新建一个对象的时候,打印11个左右的数据 ,新建两个对象的时候,//2,会打印20个数据。//1
System.out.println("i----------"+i +",thread name=="+ name
+",threadid=="+ idnum+",thread inf=="+inf);
}
}
}

实例:

package com.thread.test;

publicclass ThreadTest extends Thread {
public ThreadTest(String str){//用构造函数控制线程的名字,如果不写,默认是thread-整数
super(str);
}

@Override
publicvoid run() {
synchronized(this){
for(int i=0;i<10;i++){//控制run的内部这些东西执行的次数,不加这句,run只执行一次。
System.out.println(i+getName());
try {
sleep((long)(Math.random()*1000));
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

}
//for循环结束
System.out.println("for循环结束"+getName());
}

super.run();
}

/*
* 此方法可添加也可以不填加,start都能够调用。
* @Override
public synchronized void start() {
// TODO Auto-generated method stub
super.start();
}*/


publicstaticvoid main(String args[]){
new ThreadTest("su").start();
new ThreadTest("zhu").start();

}
}


上面方法两个线程不能同步。

方法二:用“实现”Runnable方法实现

实例:

代码

package threadtest12;
//多线程的写法1
publicclass Thread12 {

publicstaticvoid main(String args[]) {
MyThread myThread =new MyThread();
//myThread.run();
//把这个MyThread包装称为Thread
Thread t1 =new Thread(myThread);
Thread t2=new Thread(myThread);
t1.start();
t2.start();

}

}

class MyThread implements Runnable {

@Override
publicvoid run() {
// TODO Auto-generated method stub
String name = Thread.currentThread().getName();
String inf=Thread.currentThread().toString();
long idnum = Thread.currentThread().getId();
for(int i=0;i<10;i++){
System.out.println("aaaaa----------"+",thread name=="+ name
+",threadid=="+ idnum+",thread inf=="+inf);
}
}

}

两个共享一个thread对象,并发调用,20条数据

实例:

/*
* 
* 
* 这段代码用实现接口来做
* 可以让类extends继承其他类*/

package com.thread.test1;

publicclass ThreadTest1 implements Runnable{
String threadName;

public ThreadTest1(String str){
threadName=str;
}

@Override
publicvoid run() {
// TODO Auto-generated method stub
for(int i =0;i<10;i++){
System.out.println("执行第"+i);
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//System.out.println("执行完第"+i);
}
System.out.println("结束");
}

publicstaticvoid main(String[] args){
/*
* 这段跟下面的作用是一样的。。。new的ThreadTest1的对象不能调用start方法
* ThreadTest1 threadTest1=new ThreadTest1("h");
Thread thread1=new Thread(threadTest1);
thread1.start();*/

new Thread(new ThreadTest1("su")).start();
}

}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值