开始多线程

来源:互联网 发布:中国小镇 知乎 编辑:程序博客网 时间:2024/06/05 19:56

多线程,开启高级工程师之旅。第一步,写一个多线程。
在java中实现多线程的方式有两个:继承Thread类和实现Runnable接口


第一种:继承Thread

package com.test.thread;public class TestThead extends Thread{public static int index =100;public String name ;public TestThead(){}public TestThead(String name ){this.name = name;}public  void print() throws Exception{synchronized(TestThead.class){for (;index >0; index--) {System.out.println(name + " === "+index);}}}@Overridepublic  void run() {try {print();} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();}}public static void main(String[] args) {TestThead t1 = new TestThead("thread-a");TestThead t2 = new TestThead("thread-b");t1.start();t2.start();}}
多线程一般都会牵扯到共享资源,有共享资源就要考虑到同步;以上代码开启两个线程,对共享资源index进行顺序的倒序打印(100、99、98.....3、2、1)。

第二种:实现Runable接口


package com.test.thread;public class TestRunable implements Runnable{public  int index = 100;@Overridepublic  synchronized void run() {for ( ;index >0; index--) {System.out.println(Thread.currentThread().getName() + " === "+index);}}public static void main(String[] args) {TestRunable runable = new TestRunable();new Thread(runable,"aa").start();new Thread(runable,"bb").start();}}

注意两种实现和加锁的位置
第一种共享资源是static的index,大家都知道static的是静态变量,属于类的,所以锁的位置加在synchronized(TestThead.class)上了,这样就能实现对index的同步,还有在main方法中执行的时候是new了两个对象。
第二种共享的资源是一个对象的成员变量,锁直接加在方法上了,执行的时候是对对一个对象开启的两个线程。





原创粉丝点击