If organisation wide default is read write and record is shared in read mode by sharing rule or by apex then which will be the final access to the user??
OWD is always the basic configuration for record sharing. So if you have sharing rules configured as more restrictive, OWD rules will be applied.
If you open a page to create a new sharing rule, you can read the following:
You can use sharing rules only to grant wider access to data, not to restrict access.
The same for apex sharing. here is a documentation
The object’s organization-wide default access level must not be set to the most permissive access level. For custom objects, this level is Public Read/Write. For more information, see Understanding Sharing.