多线程

2018-07-23  本文已影响0人  非非非非常胖的大公鸡9527

一、编写多线程分为两种:

1.继承Thread类

2.实现runnable接口


package com.company;

class Mythreadextends Thread{

private Stringname;

public Mythread(String name){

this.name = name;

}

public void run(){

for (int i=0;i<=10;i++){

System.out.println(String.format("线程名:%s\n值为:%s",name,i));

}}}

class Myrunnableimplements Runnable{

private int num=5;

public void run(){

for(int i=0;i<5;i++) {

synchronized (this) {

if (num >0) {

try {

Thread.sleep(1000);

}catch (InterruptedException e) {

e.printStackTrace();

}

System.out.println("the number is :" +num--);

}}}}}

public class ThreadTest {

public static void main(String[] args){

//        Mythread t1 = new Mythread("线程1");

//        Mythread t2 = new Mythread("线程2");

//        t1.start();

//        t2.start();

        Myrunnable t3 =new Myrunnable();

new Thread(t3).start();

new Thread(t3).start();

}}

二、Runable相对于Thread的好处:
1.Runable适合多个相同代码程序去处理同一资源
2.Thread只能单继承,比较局限
3.增强代码的健壮性,代码可以被多个线程共享,代码和数据是独立的

三、线程休眠

Thread.sleep(1000)     //休眠一秒

四、同步和死锁
如果多个线程是实现的Runnable接口,则这个类的属性将被多个线程共享,所以容易出现同步的问题;
解决:1.在run里面加入synchonized(this),这是同步了代码块
2.将run里面的逻辑操作代码分离出来,写成一个方法,在方法面前加synchonized,然后在run里面调用这个方法

死锁:两个线程都掌握着资源,并且都在等待对方释放自己的资源,造成了代码的停滞。

上一篇 下一篇

猜你喜欢

热点阅读