thread

创建线程的两种方式:

线程的实现依靠run()方法中的线程体

创建线程类继承Thread类并实现run()方法,以此来创建

  • 第一个线程类:
    package com.zrm.threadFirst;

    public class Thread_one extends Thread{
    @Override
    public void run() {
    for (int i=0;i<1000000;i++){
    try {
    Thread.sleep(1000);
    } catch (InterruptedException e) {
    e.printStackTrace();
    }
    System.out.println("111111111");
    }
    }
    }
  • 第二个线程类:
  • package com.zrm.threadFirst;

    public class ThreadTwo extends Thread{
    @Override
    public void run() {
    for (int i=0;i<1000000;i++){
    try {
    Thread.sleep(1000);
    } catch (InterruptedException e) {
    e.printStackTrace();
    }
    System.out.println("222222222");
    }
    }
    }
  • 在一个主类中执行两个线程:
package com.zrm;

import com.zrm.threadFirst.ThreadTwo;
import com.zrm.threadFirst.Thread_one;

public class Main {
public static void main(String[] args) {
//实例两个线程对象
Thread_one th1 = new Thread_one();
ThreadTwo th2 = new ThreadTwo();
//启动线程
th1.start();
th2.start();
}


}执行如下:

第二种方法:创建runner类实现Runnable接口并且实现run()方法(线程体)

package com.zrm.threadSecond;

public class Runner_one implements Runnable{
@Override
public void run() {
for (int i=0;i<1000000;i++){
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("111111111");
}
}
}

package com.zrm.threadSecond;

public class Runner_two implements Runnable{
@Override
public void run(){
for (int i=0;i<1000000;i++){
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("222222222");
}
}
}

执行:
package com.zrm.threadSecond;

/**
* 第二种创建多线程的方法,实现Runnable接口
*/
public class Main {
public static void main(String[] args) {
//创建实现runnable接口run方法(线程体)的对应两个对象
Runner_one run1 = new Runner_one();
Runner_two run2 = new Runner_two();
//创建连个线程对象
Thread th1 = new Thread(run1);
Thread th2 = new Thread(run2);
//启动线程
th1.start();
th2.start();
}
}
结果:

 线程礼让:Thread.yield();

线程安全:

synchronized(){
}
解决办法,


StringBuilder和StringBuffer类可以解决String字符串如果频繁修改浪费内存空间的问题,String直接修改是重新开辟空间再指向,而前两个是在原空间内进行操作的,StringBuilder会出现线程安全问题,而StringBuffer不会


转载于:https://www.cnblogs.com/zrmj/p/11429330.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值