了解多线程的必备知识|Java多线程

64 阅读2分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第23天,点击查看活动详情

方法一:实现Runnable

  • 首先自定义一个MyRunnable类来实现Runnable接口。
  • 实现Runnable接口的run()方法。
  • 创建线程对象并调用start()方法来启动线程。

代码示例

package com.Jinone.www;

import java.io.IOException;

public class TextThread implements Runnable {
	private int as=1;
	@Override
	public void run() {
		while(true) {
			if(as>=100) {
				System.out.println("test1");
				System.out.println("test2");
				System.out.println("test3);
				break;
			}
			
			try {
				Thread.sleep(1000);
			} catch (InterruptedException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			System.out.println(Thread.currentThread().getName());
			if(Thread.currentThread().getName().equals("1")) {
				asone++;
			}
			if(Thread.currentThread().getName().equals("2")) {
				astwo++;
			}
			if(Thread.currentThread().getName().equals("3")) {
				asthree++;
			}
		}
				
		}
		
	
	public static void main(String[] args) {
		TextThread textThread=new TextThread();
		new Thread(textThread,"1").start();
		new Thread(textThread,"2").start();
		new Thread(textThread,"3").start();
	}
	
}

方法二:继承Thread类

  • 子类继承Thread父类后共享父类功能,子类因此也具有了多线程的功能。
  • 子类对象使用.start()来启动线程。

上述两种方法是有区别的,一般并不推荐使用Thread类的方式来实现多线程,因为不能避免OOP单继承的局限性,比较推荐使用实现Runnable接口的方式来实现多线程,这样可以避免继承的局限性,可以使一个对象同时被多个线程使用,灵活方便。

多线程面对的问题:当多个线程对同一块内存资源进行操作时,可能会发生冲突,造成数据紊乱,很显然,这样的线程是不安全的。

静态代理

 真实的对象和代理对象都必须实现一个接口,代理对象还需要代理真实角色,这样做的好处是可以使代理对象实现更多功能,这些功能是真实对象所无法实现的,而真实对象则专注于自己的功能。

代码示例

//目标接口 public interface ProxyInterface { public void sendMsg(); }

//目标对象 public class SourceObject implements ProxyInterface{ @Override public void sendMsg() { System.out.println("send message!!"); } }

//代理对象
public class ProxyDemo implements ProxyInterface{
    private SourceObject target;

    public ProxyDemo(ProxyInterface target){
        this.target = (SourceObject) target;
    }

    //代理对象对目标对象的sendMsg方法进行增强
    @Override
    public void sendMsg() {
        System.out.println("get phone number!");
        target.sendMsg();
        System.out.println("send the email!");
    }
}