[1] 创建多线程的两种方式

  1.1 通过继承Thread类创建多线程

    1.定义Thread类的子类,重写run()方法,在run()方法体中编写子线程要执行的功能。

    2.创建子线程的实例对象,相当于新建了一条子线程。

    3.调用子线程的start()方法,子线程启动并执行run()方法中的功能。

  1.2 通过实现Runnable接口创建多线程

    1.定义一个类,实现Runnable接口,重写run()方法,在run()方法体中编写子线程要执行的功能。

    2.创建实现类的对象。

    3.调用Thread类的有参构造函数,将上述实现类对象作为形参传入,创建Thread类的对象。该对象相当于一条新线程。

    4.调用Thread对象的start()方法,子线程启动并执行run()方法中的功能。

[2] 线程同步机制

  当多条线程操作共享数据时,会出现线程安全问题。为了解决这一问题,需要保证不同线程在访问同一数据时保持一定的顺序,即“线程的同步机制”。实现该机制有两种方法:同步代码块,同步方法。前者可以指定任意对象作为监视器,后者只能默认使用当前对象作为监视器。故使用同步方法保证线程同步有一定的局限性。

[3] 代码实例

  3.1 通过继承Thread类创建多线程,并使用同步代码块的方式保证线程的同步。

 //通过继承Thread类的方式创建多线程
//多条线程操作同一个共享资源,存在线程安全问题
//通过同步代码块的方式使线程同步
package pack01; //定义子线程
class SubThread extends Thread { private static int i = 1;
static Object lock = new Object(); //创建静态对象作为监视器 // 子线程要实现的功能:将静态变量i累加到100,并打印每次的累加结果
// 由于多条线程会同时操作静态变量i,故需要保证线程的同步
public void run() { while (true) { synchronized (lock) {
if (i <= 100) {
System.out.println(Thread.currentThread().getName() + "----" + i);
++i; } else {
break;
}
}
} }
} public class MulThread {
public static void main(String[] args) { SubThread st1 = new SubThread();
SubThread st2 = new SubThread(); // 设置线程名称
st1.setName("ONE####");
st2.setName("TWO...."); // 启动线程
st1.start();
st2.start();
}
}

  3.2 通过实现Runnable接口创建多线程,使用同步方法保证线程同步。

 //通过实现Runnable接口的方式创建多线程
//多条线程操作同一个共享资源,存在线程安全问题
//通过使用同步方法保证线程的同步
package pack01; class Sub implements Runnable{ private static int i=1; //被多条线程共同操作的静态变量 public void run() {
while(true) {
printI();
}
} public synchronized void printI() { //将要需要同步的代码封装进一个同步方法中 if(i<=100) {
System.out.println( Thread.currentThread().getName() + "----" + i );
++i;
} else {
System.exit(0);
}
}
} public class MulThread2 {
public static void main(String[] args) { Sub sub = new Sub(); Thread t1 = new Thread(sub);//将Runnable接口的实现类对象作为参数,传给Thread构造器
Thread t2 = new Thread(sub); t1.setName("ONE####");
t2.setName("TWO...."); t1.start();
t2.start();
}
}

注:希望与各位读者相互交流,共同学习进步。

Java分享笔记:创建多线程 & 线程同步机制的更多相关文章

  1. Java并发编程:Java中的锁和线程同步机制

    锁的基础知识 锁的类型 锁从宏观上分类,只分为两种:悲观锁与乐观锁. 乐观锁 乐观锁是一种乐观思想,即认为读多写少,遇到并发写的可能性低,每次去拿数据的时候都认为别人不会修改,所以不会上锁,但是在更新 ...

  2. JAVA基础知识之多线程——线程同步

    线程安全问题 多个线程同时访问同一资源的时候有可能会出现信息不一致的情况,这是线程安全问题,下面是一个例子, Account.class , 定义一个Account模型 package threads ...

  3. Java多线程编程(4)--线程同步机制

    一.锁 1.锁的概念   线程安全问题的产生是因为多个线程并发访问共享数据造成的,如果能将多个线程对共享数据的并发访问改为串行访问,即一个共享数据同一时刻只能被一个线程访问,就可以避免线程安全问题.锁 ...

  4. Java多线程 | 02 | 线程同步机制

    同步机制简介 ​ 线程同步机制是一套用于协调线程之间的数据访问的机制.该机制可以保障线程安全.Java平台提供的线程同步机制包括: 锁,volatile关键字,final关键字,static关键字,以 ...

  5. Linux程序设计学习笔记----多线程编程线程同步机制之相互排斥量(锁)与读写锁

    相互排斥锁通信机制 基本原理 相互排斥锁以排他方式防止共享数据被并发訪问,相互排斥锁是一个二元变量,状态为开(0)和关(1),将某个共享资源与某个相互排斥锁逻辑上绑定之后,对该资源的訪问操作例如以下: ...

  6. Java多线程的同步机制(synchronized)

    一段synchronized的代码被一个线程执行之前,他要先拿到执行这段代码的权限,在 java里边就是拿到某个同步对象的锁(一个对象只有一把锁): 如果这个时候同步对象的锁被其他线程拿走了,他(这个 ...

  7. 【总结】Java线程同步机制深刻阐述

    原文:http://hxraid.iteye.com/blog/667437 我们可以在计算机上运行各种计算机软件程序.每一个运行的程序可能包括多个独立运行的线程(Thread). 线程(Thread ...

  8. Java基础 继承的方式创建多线程 / 线程模拟模拟火车站开启三个窗口售票

    继承的方式创建多线程 笔记: /**继承的方式创建多线程 * 线程的创建方法: * 1.创建一个继承于Thread 的子类 * 2.重写Thread类的run()方法 ,方法内实现此子线程 要完成的功 ...

  9. linux学习笔记之线程同步机制

    一.基础知识. 1:线程同步机制:互斥量,读写锁,条件变量,自旋锁,屏障. 1,互斥量:每个进程访问被互斥量保护的资源时,都需要先对互斥量进行判断. 1)互斥量重要属性:进程共享属性,健壮属性,类型属 ...

随机推荐

  1. hdu 3642 覆盖3次以上体积

    http://www.cnblogs.com/kane0526/archive/2013/03/06/2947118.html 题目大意:给你n个立方体,求相交区域大于等于三次的体积和. 这题需要前面 ...

  2. CSS Hack兼容

    CSS中有很多标签在不同浏览器中有不同的兼容性问题,问了让网页的功能更好的不同浏览器中显示正常, 需要通过hack的方式来解决浏览器兼容问题. CSS hack问题由来已久,目前我的了解甚少,以下是转 ...

  3. springmvc 全局的异常拦截处理 @ControllerAdvice注解 @ExceptionHandler

    第一步: Dispatcher前端控制器的源码中 默认的 private boolean throwExceptionIfNoHandlerFound = false;说明如果没有找到匹配的执行器,不 ...

  4. BZOJ5249: [2018多省省队联测]IIIDX(线段树 贪心)

    题意 题目链接 Sol 不难发现题目给出的是一个树,其中\(\frac{i}{K}\)是\(i\)的父亲节点 首先,当\(d_i\)互不相同时,一个显然的贪心策略就是优先给编号小的分配较大的权值.可以 ...

  5. H5新特性-----type=file文件上传

    1.语法 单文件上传:<input type="file" id="file1"/> 多文件上传:<input type="file ...

  6. js实现螺旋纹理特效

    效果如下       实现代码如下: <!doctype html> <html> <head> <meta charset="UTF-8" ...

  7. 运用Edraw为WPF应用程序嵌入Office文档的方法总结

    具体描述了运用Edraw Office Viewer Component为WPF应用长须嵌入MS Word,Excel以及Power Point的方法. 打开Visual Studio,并创建一个新的 ...

  8. Sde各类命令详解(sdemon 、sdelayer、sdeservice、sdetable、sdeconfig、SdeExport_SdeImport)

      Sdemon命令详解: http://wenku.baidu.com/view/3b53e8ec0975f46527d3e1c2.html 1.重建空间索引       D:\Program Fi ...

  9. java web的安全约束--表单的验证

    例子,表单和JDBCRealm的安全验证 参考了一篇文章http://www.cnblogs.com/dyllove98/archive/2013/07/31/3228698.html 1.要在wab ...

  10. java maven项目 导入jar包注意

    1.将jar 包放到lib目录下 2.build path 3.点击maven主项目右键选择properties 4.选择myeclipse 下的第一个选项 5.点击add   选择archives ...