java同步方法的特点_java多线程有哪些优点?同步实例代码展示

在我们的日常学习当中会发现java的知识点是总是息息相关的,可以串联起来。java中多线程的有关内容可以衍生出更多知识,它的优缺点也是非常明显的。你都了解吗?一起来看看吧。

首先为大家介绍一下,多线程(多个线程同时运行)程序的优缺点

优点:

⑴可以减轻系统性能方面的瓶颈,因为可以并行操作;

⑵提高CPU的处理器的效率,在多线程中,通过优先级管理,可以使重要的程序优先操作,提高了任务管理的灵活性;

另一方面,在多CPU系统中,可以把不同的线程在不同的CPU中执行,真正做到同时处理多任务。

缺点:

⑴开启线程需要占用一定的内存空间(默认情况下,主线程占用1M,子线程占用512KB),如果开启大量的线程,会占用大量的内存空间,降低程序的性能

⑵线程越多,CPU在调度线程上的开销就越大

⑶程序设计更加复杂:比如线程之间的通信、多线程的数据共享

然后为大家展示一下同步的实例代码:Demo1:

package test.thread;

class SynTest

{

//非同步

static void method(Thread thread)

{

System.out.println("begin " + thread.getName());

try

{

Thread.sleep(2000);

}

catch (Exception ex)

{

ex.printStackTrace();

}

System.out.println("end " + thread.getName());

}

//同步方式一:同步方法

synchronized static void method1(Thread thread)

{ //这个方法是同步的方法,每次只有一

个线程可以进来

System.out.println("begin " + thread.getName());

try

{

Thread.sleep(2000);

}

catch (Exception ex)

{

ex.printStackTrace();

}

System.out.println("end " + thread.getName());

}

//同步方式二:同步代码块

static void method2(Thread thread)

{

synchronized(SynTest.class)

{

System.out.println("begin " + thread.getName());

try

{

Thread.sleep(2000);

}

catch (Exception ex)

{

ex.printStackTrace();

}

System.out.println("end " + thread.getName());

}

}

//同步方式三:使用同步对象锁

private static Object _lock1 = new Object();

private static byte _lock2[] = {}; //据说,此锁更可提高性能。源于:锁的对象越小越好

static void method3(Thread thread)

{

synchronized(_lock1)

{

System.out.println("begin " + thread.getName());

try

{

Thread.sleep(2000);

}

catch (Exception ex)

{

ex.printStackTrace();

}

System.out.println("end " + thread.getName());

}

}

public static void main(String[] args)

{

//启动3个线程,这里用了匿名类

for (int i = 0; i 

{

new Thread()

{

public void run()

{

method(this);

//method1(this);

//method2(this);

//method3(this);

}

}.start();

}

}

}

Demo2:

package test.thread;

import com.util.LogUtil;

public class SynTest2

{

public static void main(String[] args)

{

Callme target = new Callme();

Caller ob1 = new Caller(target, "Hello");

Caller ob2 = new Caller(target, "Synchronized");

Caller ob3 = new Caller(target, "World");

}

}

class Callme

{

synchronized void test()

{

LogUtil.log("测试是否是:一旦一个线程进入一个实例的任何同步方法,别的线程将不能

进入该同一实例的其它同步方法, 但是该实例的非同步方法仍然能够被调用 ");

}

void nonsynCall(String msg)

{

LogUtil.log("[" + msg);

LogUtil.log("]");

}

synchronized void synCall(String msg)

{

LogUtil.logPrint("[" + msg);

LogUtil.log("]");

}

}

class Caller implements Runnable

{

String msg;

Callme target;

Thread t;

Caller(Callme target, String msg)

{

this.target = target;

this.msg = msg;

t = new Thread(this);

t.start();

}

public void run()

{

// TODO Auto-generated method stub

//target.nonsynCall(msg);

target.synCall(msg);

target.test();

}

}

同步的实例代码还是非常详细的,这也是与线程有关的比较繁琐的知识点。如果你对java知识非常有兴趣,想要了解更多java实例,敬请关注奇Q工具网。

推荐阅读:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/356421.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

使用JUnit规则进行干净的集成测试

JUnit Rules的优势,尤其是在进行集成测试时,几乎不能被高估。 在本文中,我们将阐明ExternalResource扩展的有用性。 在我们必须使用抽象外部资源的第三方库的情况下,这些简化了灯具控制。 作为示例,我们将看看如何基于…

FreeRTOS--API函数

FreeRTOS--API函数转载于:https://www.cnblogs.com/LittleTiger/p/6128708.html

java fx 内置图标_图标 – 如何在Windows上为javafx本机程序包图标设置自定义图标...

我正在尝试创建exe文件的图标,同时创建javafx包装的本机捆绑.我尝试将图标添加到pom.xml中,但直到它不会为我工作,因为它提供了默认图标使用包含Pom.xml的Intellij IDEA IDE,通过command mvn jfx:build-native创建包这是我的pom.xml:com.zenjavajavafx-…

winform基础窗体设置及基础控件

WinForm - 也叫做C/S 客户端 另:B/S是 网页端 客户端应用程序 - 是需要安装在用户电脑上才可以使用的程序 特点: 不需要联网也可以打开使用部分功能,但是现在的情况是许多功能依然需要互联网的支持,代码部分在用户电脑上执行 使用…

java排序两个数组_java – 如何相对于彼此排序两个数组.

由于这两个值紧密耦合在一起,我实际上会编写一个自定义类来包含信息,然后对这些类进行排序,而不是使用原始数组.这样做会让你对许多可能的错误开放.这样可以更好地控制,数据封装以及将来可能包含哪些方法或数据的扩展.public class MyDistance implements Comparable {private …

【FastJSON】解决FastJson中“$ref 循环引用”的问题

0、开发环境 SSH&#xff0c;EasyUI&#xff0c;MySQL 1、需求要求&#xff1a; (1)首先获取所有的贷款订单数据&#xff0c;即List <LoanOrder>。 (2)然后从单个贷款订单实体LoanOrder去访问贷款人实体Loaner的信息。 2、实体之间的关系描述 (1)LoanOrder实体与Loaner…

java 枚举内嵌枚举_Java枚举益智游戏

java 枚举内嵌枚举假设我们有以下代码&#xff1a; enum Case {CASE_ONE,CASE_TWO,CASE_THREE;private static final int counter;private int valueDependsOnCounter;static {int sum 0;for(int i 0; i<10; i) {sum i;}counter sum;} Case() {this.valueDependsOnCounte…

Java注释 link_Java 文档注释

Java只是三种注释方式。前两种分别是// 和/* */&#xff0c;第三种被称作说明注释&#xff0c;它以/** 开始&#xff0c;以 */结束。说明注释允许你在程序中嵌入关于程序的信息。你可以使用javadoc工具软件来生成信息&#xff0c;并输出到HTML文件中。说明注释&#xff0c;是你…

JavaFX真实世界应用程序:EIZO CuratOR Caliop

JavaFX Real-World应用程序第四号称为Caliop 。 它是EIZO为医院手术室开发的CuratOR解决方案的前端。 前端在壁挂式控制台上运行&#xff0c;并允许操作团队查找有关患者的信息&#xff0c;控制各种视频源到不同监视器的路由&#xff0c;录制视频&#xff0c;拍摄照片/剧照。 …

约瑟夫问题(java实现)

方法一、自定义的链表实现package com.code.yuesefu;public class YueSeFuList {public static void main(String[] args) {int count 41;//申请一个指定长度的链表Node n YueSeFuList.createNodes(count);for(int i0;i<count;i){Node second n.next;//第2个n n.next.ne…

java多线程流式写入文件夹_java多线程写入同一文件

1.[代码][Java]代码package com.thread;import java.io.File;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.IOException;import java.util.concurrent.ConcurrentLinkedQueue;/*** 多线程下写文件* author owen.huang**//*** 将要写入…

Duilib嵌入CEF以及JavaScript与C++交互

转载:http://blog.csdn.net/foruok/article/details/50573612 转载:http://blog.csdn.net/foruok/article/details/50584985 转载:http://blog.csdn.net/mfcing/article/details/44539035 转载:https://github.com/fanfeilong/cefutil/blob/master/doc/CEF_JavaScript_Cpp.md 转…

layui分页limit不显示_【图片】新手 分页显示不了呀【layui吧】_百度贴吧

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼$(function () {layui.use([table, layer], function () {layer layui.layer, layuiTable layui.table;tabSalesList layuiTable.render({elem: "#JFTZTJ",totalRow: true,url: /DailyRoutine/MembershipManagement/O…

netbeans代码提示_NetBeans可用性提示

netbeans代码提示的Java IDE都来了&#xff0c;因为在很长的路要走天的JBuilder的 &#xff08;尽管JBuilder中似乎是一个值得欢迎提前在时间&#xff09;。 当今的Java IDE&#xff08;例如NetBeans &#xff0c; Eclipse &#xff0c; IntelliJ IDEA和JDeveloper &#xff09…

推荐文章:机器学习:“一文读懂机器学习,大数据/自然语言处理/算法全有了...

PS:文章主要转载自CSDN大神"黑夜路人"的文章: http://blog.csdn.NET/heiyeshuwu/article/details/43483655 本文主要对机器学习进行科普,包括机器学习的定义、范围、方法,包括机器学习的研究领域&#xff1a;模式识别、计算机视觉、语音识别、自然语言…

java比较炫的登录界面_html+css实现漂亮的透明登录页面,HTML实现炫酷登录页面...

承蒙各位小伙伴的支持&#xff0c;鄙人有幸入围了《CSDN 2020博客之星》的前200名&#xff0c;现在进入投票环节&#xff0c;如果我平时写的文章和分享对你有用的话&#xff0c;请每天点击一下这个链接&#xff0c;投上你们宝贵的一票吧&#xff01;谢谢&#xff01;❤️ 每一票…

在OpenShift上扩展Java EE微服务

这个小系列的前两个部分介绍了如何使用WildFly Swarm构建一个微型JAX-RS服务并将其打包到Docker映像中 。 您学习了如何将此示例部署到OpenShift &#xff0c;现在该进行一点扩展了。 为什么扩展很重要 基于微服务的体系结构的关键方面之一是分解为高性能的单个服务&#xff0…

mssql 远程无法连接mysql_在本地 怎么远程连接MSSQL数据库

hp连接mssql数据库有几个注意事项&#xff0c;尤其mssql的多个版本、32位、64位都有区别。首先&#xff0c;php.ini文件中;extensionphp_pdo_mssql.dll ;extensionphp_pdo_odbc.dll 前面的分号去掉&#xff0c;对应的使哪种方式连接mssql。注意要重启服务使其生效。一、建立连接…

jQuery 一些小技巧

1. 返回顶部按钮 可以利用 animate 和 scrollTop 来实现返回顶部的动画&#xff0c;而不需要使用其他插件。 // Back to top $(a.ktop).click(function () { $(document.body).animate({scrollTop: 0}, 800);…

OpenMap教程第2部分–使用MapHandler构建基本地图应用程序–第1部分

1.简介 在第一个教程中&#xff0c;我们创建了一个基本的OpenMap GIS应用程序&#xff0c;该应用程序在JFrame中显示一个从文件系统加载的具有一个形状图层的地图。 该教程基于com.bbn.openmap.app.example.SimpleMap 。 在该教程中&#xff0c;我们使用了以下OpenMap类&#x…